2010-09-14 58 views

回答

5

只是测试它。如果模式无效,则 preg_match()将返回FALSE

返回值:preg_match()返回模式匹配次数 。 这将是0次(不匹配) 或1次,因为preg_match()将在第一次匹配后停止搜索。 preg_match_all()相反将 继续,直到它到达 主题的末尾。 如果 发生错误,preg_match()返回FALSE。

8

按照docs

的preg_match()返回FALSE如果发生了错误。

问题是它也会发出警告。

解决此问题的一种方法是抑制错误消息的输出,捕获返回值并使用error_get_last()输出错误(如果错误)。

喜欢的东西

$old_error = error_reporting(0); // Turn off error reporting 

$match = preg_match(......); 

if ($match === false) 
{ 
    $error = error_get_last(); 
    echo $error["message"]; 
} 

error_reporting($old_error); // Set error reporting to old level 

您可能不需要在生产环境中的错误汇报位 - 这取决于你的设置。

+0

+1用于提及错误消息输出抑制。 – Gumbo 2010-09-14 15:44:37

+1

你知道,它不禁止使用'@':p – Artefacto 2010-09-14 16:06:43

+0

应该是'if($ match === false)' – webbiedave 2010-09-14 17:55:12

0
if (preg_match($regex, $variable)) { 
    echo 'Valid'; 
} 
else { 
    echo 'InValid'; 
} 
+1

您必须使用preg_match(...)!== false来检查它,因为如果它有效但它会返回0不匹配 – mck89 2010-09-14 15:44:11

+0

您应该与FALSE进行比较:if(preg_match($ regex,$ variable)!== FALSE){'。该模式可以是有效的,没有匹配。请参阅[文档](http://nl2.php.net/manual/en/function.preg-match.php) – Lekensteyn 2010-09-14 15:44:36

0

我以为我在MRE中看到过这种方法;原来这是弗里德自己写的。这是listing

-1

不要使用@,在preg_match之前使用反斜杠在较新版本的PHP(5.3+?)中抛出异常。

tr{ 
    if (\preg_match($regex, $variable)===false) 
     echo 'Valid'; 
    else 
     echo 'InValid'; 
} 
catch(Exception $e) { 
    echo $e->getMessage(); die; 
} 
+0

反斜杠只是指全局名称空间。否则它什么也不做,甚至不改变错误行为。 – 2017-09-21 14:35:14