测试正则表达式在 PHP 中是否有效
我正在编写一个表单验证类,并希望在验证中包含正则表达式。因此,提供的正则表达式不能保证有效。
我如何(有效地)检查正则表达式是否有效?
我正在编写一个表单验证类,并希望在验证中包含正则表达式。因此,提供的正则表达式不能保证有效。
我如何(有效地)检查正则表达式是否有效?
在呼叫中使用该模式。如果函数返回,则您的模式可能存在问题。据我所知,这是检查正则表达式模式在PHP中是否有效的最简单方法。preg_*
false
下面是指定正确类型的布尔检查的示例:
$invalidPattern = 'i am not valid regex';
$subject = 'This is some text I am searching in';
if (@preg_match($invalidPattern, $subject) === false) {
// the regex failed and is likely invalid
}
当您打开错误报告时,您无法简单地测试布尔结果。如果正则表达式失败,则会引发警告(即“警告:未找到结束分隔符 xxx”)。
我觉得奇怪的是,PHP文档没有说明这些抛出的警告。
以下是我对这个问题的解决方案,使用尝试,捕获。
//Enable all errors to be reported. E_WARNING is what we must catch, but I like to have all errors reported, always.
error_reporting(E_ALL);
ini_set('display_errors', 1);
//My error handler for handling exceptions.
set_error_handler(function($severity, $message, $file, $line)
{
if(!(error_reporting() & $severity))
{
return;
}
throw new ErrorException($message, $severity, $severity, $file, $line);
});
//Very long function name for example purpose.
function checkRegexOkWithoutNoticesOrExceptions($test)
{
try
{
preg_match($test, '');
return true;
}
catch(Exception $e)
{
return false;
}
}