2016-10-27 128 views
2

我在使preg_match允许7-10位数字。数字和字母表的preg匹配

preg_match('/[0-9]{7,10}/', $studentID 

此外另一个preg_match代码,允许最多20个字母与空间和连字符。

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

这两个都不起作用。

+0

您的陈述都没有被正确关闭w /');' –

+0

'a-zA-Z'与'/ i'是多余的。 '/ i'已经使正则表达式不区分大小写,所以提供大小写版本是没有意义的。和'{,20} +'也没有多大意义。 –

回答

1

您需要锚添加到第一个正则表达式,你用他们的第二图案以同样的方式,你必须定义为限制量词下界在第二图案(比如,0至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!"; 
} 

PHP demo

注意{0,20}和占有欲{0,20}+版本将工作一样,因为这里的格局并没有随着其他消费子模式(所以,没有必要禁止回溯了量化的子模式)。

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

相关问题