在PHP中使用preg_match()来验证不仅仅找到完整的字符串匹配

时间:2014-02-10 21:55:17

标签: php regex

如果字符串包含指定的正则表达式以外的字符,如何让php preg_match返回false?

这是我目前拥有的,但即使$ data

中包含非法字符,它也会返回true
if (preg_match('/^[a-z0-9 .:_]+$/i', $data)) {
}

请参阅下面的示例。 http://rubular.com/r/Fimhi0Rgc5

谢谢!

3 个答案:

答案 0 :(得分:1)

Citing from the docs

  

如果模式与给定主题匹配,则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)) {
}