2011-07-15 55 views
5

我想验证输入字段与此模式的正则表达式[A-Za-z]{,10} 我希望它只发现一个匹配,如果在输入字段中发送10个或更少的字符,我得到的问题是它会匹配所有少于10个字符的单词。使用正则表达式按长度过滤字符串

有没有办法说,如果有超过10个字符在输入字段回来为false,还是只是更好地用PHP做strlen

+0

请注意:'{,10}'是一个无效的量词。虽然:“{10,}”表示“_”匹配10次或更多次“_,但表达式”{,10}“并不意味着_”匹配0到10次“_实际上意味着:_”匹配一个左花括号,一个逗号,数字1,数字0和一个右花括号“_。要得到你想要的行为,你需要像这样指定第一个数字:'{0,10}'。 – ridgerunner

回答

1

在OP和所有当前正则表达式答案中存在一个重要的语法错误:在PHP中使用大括号量词时(PCRE),您需要指定第一个数字。 (即表达式:{,10}不是一个有效的量词!)尽管逗号和第二个数字是可选的,但是需要一个大括号量词的第一个数字。因此,表达式应该像这样指定:

if (preg_match('/^[A-Za-z]{0,10}$/', $text)) 
    // Valid input 
else 
    // Invalid input 
3

如果您需要验证它只是字母,请不要使用strlen()。相反,把边界(^$)对您正则表达式:

/^[A-Za-z]{,10}$/ 
0

如果你只是匹配^[A-Za-z]{,10}$它会检查整个字符串是10或更少。

0

^[A-Za-z]{,10}$

[email protected]#$^&$a36#&$^将通过您的正则表达式,因为a是它的串并a[A-Za-z]{,10}

0

如果你只在字符串的长度有关,正则表达式是严厉的,你应该使用strlen代替。

相关问题