PHP中preg_match匹配条件符合却返回false的问题及解决办法
为什么我的preg_match验证返回false?
我用这段代码验证输入:
$string = 'test'; if (preg_match ('/[^-a-z\d]/i', $string)) { return true; } else { return false; }
我完全搞不懂为什么它返回false!我是不是哪里想错了?按道理它不该返回true吗?
问题出在哪?
你写的正则/[^-a-z\d]/i里,^放在方括号里面是表示“取反”的意思——也就是说,这个正则是在找不是小写字母、数字、连字符的字符。
当你的字符串是'test'时,里面全是符合a-z的字符,没有任何不符合的内容,所以preg_match找不到匹配项,返回0,你的代码就会进入else分支,返回false。这和你预期的逻辑刚好反过来啦!
正确的解决方案
如果你想验证字符串只包含字母、数字和连字符,应该用这个正则:
preg_match ('/^[-a-z\d]*$/i', $string)
这里的^和$是锚定整个字符串的开头和结尾,*表示允许0个或多个符合[-a-z\d]的字符,i修饰符忽略大小写。这样当字符串完全符合要求时,preg_match返回1(匹配成功),不符合则返回0,刚好满足你的验证需求。
内容的提问来源于stack exchange,提问作者user5820249
相关产品推荐
相关产品推荐

