我在写一个PHP脚本,它接受preg_match()使用的用户的正则表达式模式。我如何检查模式是否有效?如何捕获无效的preg_match模式?
回答
只是测试它。如果模式无效,则 preg_match()
将返回FALSE
。
返回值:preg_match()返回模式匹配次数 。 这将是0次(不匹配) 或1次,因为preg_match()将在第一次匹配后停止搜索。 preg_match_all()相反将 继续,直到它到达 主题的末尾。 如果 发生错误,preg_match()返回FALSE。
按照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
您可能不需要在生产环境中的错误汇报位 - 这取决于你的设置。
if (preg_match($regex, $variable)) {
echo 'Valid';
}
else {
echo 'InValid';
}
您必须使用preg_match(...)!== false来检查它,因为如果它有效但它会返回0不匹配 – mck89 2010-09-14 15:44:11
您应该与FALSE进行比较:if(preg_match($ regex,$ variable)!== FALSE){'。该模式可以是有效的,没有匹配。请参阅[文档](http://nl2.php.net/manual/en/function.preg-match.php) – Lekensteyn 2010-09-14 15:44:36
不要使用@,在preg_match
之前使用反斜杠在较新版本的PHP(5.3+?)中抛出异常。
tr{
if (\preg_match($regex, $variable)===false)
echo 'Valid';
else
echo 'InValid';
}
catch(Exception $e) {
echo $e->getMessage(); die;
}
反斜杠只是指全局名称空间。否则它什么也不做,甚至不改变错误行为。 – 2017-09-21 14:35:14
- 1. preg_match捕获意外的子模式
- 2. 如何从preg_match获取命名捕获?
- 3. PHP的preg_match,如何捕获只命名的正则表达式?
- 4. preg_match不捕获内容
- 5. preg_match捕捉周期\。在非捕获组
- 6. 无模式MsgBox,错误捕获,。找到
- 7. 如何将多个子模式捕获到一个捕获?
- 8. 正则表达式问题:名字捕获,的preg_match
- 9. Python - 我如何捕获chown的错误。 chown:无效的用户
- 10. 捕获无效的文件路径
- 11. NSRegularExpression捕获部分无效的JSON
- 12. 捕获getopt的无效选项
- 13. 捕获无效的xml错误消息
- 14. 捕获所有无效的网址
- 15. PHP的preg_match模式问题,
- 16. 未捕获的SyntaxError:无效的正则表达式
- 17. 使用请求模块捕获无效的URL预重定向
- 18. xsd模式无效?
- 19. XML模式中的无效模式
- 20. 如何使用JAX-RS捕获所有无效的URL?
- 21. 将preg_match模式转换为javascript模式
- 22. 指定的模式无效
- 23. 正则表达式捕获组与PHP preg_match不返回值
- 24. Kendo UI Grid,未捕获错误:无效模板
- 25. Kendo Grid - 未捕获错误:无效模板
- 26. php preg_match搜索模式
- 27. preg_match自定义模式
- 28. PHP preg_match函数:如何为preg_match编写一个真正的模式?
- 29. 如何使图案不捕获时关闭标签无效
- 30. django url正则表达式捕获无效url
+1用于提及错误消息输出抑制。 – Gumbo 2010-09-14 15:44:37
你知道,它不禁止使用'@':p – Artefacto 2010-09-14 16:06:43
应该是'if($ match === false)' – webbiedave 2010-09-14 17:55:12