Php 数字和字母的preg匹配

Php 数字和字母的preg匹配,php,preg-match,Php,Preg Match,我正在制作允许7-10位数字的preg_match preg_match('/[0-9]{7,10}/', $studentID 另外还有另一个preg_match代码,允许最多20个带有空格和连字符的字母 preg_match ('/^[a-zA-Z -]{,20}+$/i', $familyname 这两个都不起作用。您需要向第一个正则表达式中添加锚,方法与在第二个模式中使用锚的方法相同,并且必须在第二个模式中定义限制量词的下限(例如,0到20): 见 请注意,{0,20}及其所有格{0

我正在制作允许7-10位数字的
preg_match

preg_match('/[0-9]{7,10}/', $studentID
另外还有另一个
preg_match
代码,允许最多20个带有空格和连字符的字母

preg_match ('/^[a-zA-Z -]{,20}+$/i', $familyname

这两个都不起作用。

您需要向第一个正则表达式中添加锚,方法与在第二个模式中使用锚的方法相同,并且必须在第二个模式中定义限制量词的下限(例如,0到20):

请注意,
{0,20}
及其所有格
{0,20}+
版本在这里的工作方式相同,因为其他消费子模式不遵循该模式(因此,无需禁用量化子模式的回溯)


另外,
'/^[A-Z-]{0,20}$/i'
是姓氏的一个非常通用的子模式,您可能需要进一步精确它。例如,要禁止像所有空格或
-----------
这样的字符串,您可以使用
'/^(?=.{0,20}$)[A-Z]+(?:[-][A-Z]+)*$/i'

您的语句都没有正确地关闭w/
a-zA-Z
/i
是冗余的
/i
已经使regex不区分大小写,因此提供大写和小写版本是毫无意义的。而且
{,20}+
也没有多大意义。
$studentID = "1234567";
if (preg_match('/^[0-9]{7,10}$/', $studentID)) {
    echo "$studentID matched!\n";
}
$familyname = "Pupkin";
if (preg_match ('/^[A-Z -]{0,20}$/i', $familyname)) {
    echo "$familyname matched!";
}