我使用此正则表达式来测试用户名是否有效:
[A-Za-z0-9 _]{3,12}
当我在文本编辑器中使用字符串test'ing
对匹配项进行测试时,会突出显示' test'并且',但是当我在PHP中使用以下代码时:
if(!preg_match('/[A-Za-z0-9 _]{3,12}/', $content)
其中$ content是test'ing
,它应该返回FALSE,它仍然返回true。
我的正则表达式有问题吗?我需要:
{3,12}
[A-Za-z0-9 _]
提前致谢...
答案 0 :(得分:2)
您应该添加开始和结束锚点(^$
):
if(!preg_match('/^[A-Za-z0-9 _]{3,12}$/', $content)
主播^
匹配字符串的开头,$
匹配结尾。这样,它只会匹配整个字符串是否满足您的正则表达式。
希望有所帮助
答案 1 :(得分:2)
您在正则表达式中缺少锚点,因此正则表达式可以轻松匹配字符串中任何位置中的3个字符。这不是你想要的。您想要检查您的正则表达式是否与整个字符串匹配。为此,您需要包含锚点(^
和$
)。
if(!preg_match('/^[A-Za-z0-9 _]{3,12}$/', $content)
^ ^
^
断言字符串开头的位置,$
断言字符串末尾的位置。重要的是要注意这些元字符实际上并不消耗字符。它们是零宽度断言。
进一步阅读: