如果字符串包含指定的正则表达式以外的字符,如何让php preg_match返回false?
这是我目前拥有的,但即使$ data
中包含非法字符,它也会返回trueif (preg_match('/^[a-z0-9 .:_]+$/i', $data)) {
}
请参阅下面的示例。 http://rubular.com/r/Fimhi0Rgc5
谢谢!
答案 0 :(得分:1)
如果模式与给定主题匹配,则preg_match()返回1,否则返回0;如果发生错误,则返回FALSE。
所以preg_match NEVER返回true。它返回1,其作用为true,或者返回0,如果未找到模式,则返回false。而且我看不出你接受了哪些非法字符,(请提供一个例子) - 我认为模式是正确的。
答案 1 :(得分:1)
那是因为您要查看它是否可以在您的字符串中找到任何这些字符。您可能想要做的是在大括号内使用插入符^
操作符,然后如果在那里找到匹配项,则表示您有非法字符。
if (preg_match('/[^a-z0-9 .:_]/i', $data)) {
// ILLEGAL CHARACTERS DETECTED
}
else {
// NO ILLEGAL CHARACTERS DETECTED
}
答案 2 :(得分:1)
您的代码存在的问题是您永远不会关闭if语句。
你可以改变这个:
if (preg_match('/^[a-z0-9 .:_]+$/i', $data) {
}
对此:
if (preg_match('/^[a-z0-9 .:_]+$/i', $data)) {
}