测试正则表达式在 PHP 中是否有效

2022-08-31 01:04:07

我正在编写一个表单验证类,并希望在验证中包含正则表达式。因此,提供的正则表达式不能保证有效。

我如何(有效地)检查正则表达式是否有效?


答案 1

在呼叫中使用该模式。如果函数返回,则您的模式可能存在问题。据我所知,这是检查正则表达式模式在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
}

答案 2

当您打开错误报告时,您无法简单地测试布尔结果。如果正则表达式失败,则会引发警告(即“警告:未找到结束分隔符 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;
    }
}

推荐