如何验证正则表达式?
我想在PHP中测试正则表达式的有效性,最好在使用之前。这样做的唯一方法实际上是尝试a并查看它是否返回?preg_match()
FALSE
有没有更简单/正确的方法来测试有效的正则表达式?
我想在PHP中测试正则表达式的有效性,最好在使用之前。这样做的唯一方法实际上是尝试a并查看它是否返回?preg_match()
FALSE
有没有更简单/正确的方法来测试有效的正则表达式?
// This is valid, both opening ( and closing )
var_dump(preg_match('~Valid(Regular)Expression~', '') === false);
// This is invalid, no opening ( for the closing )
var_dump(preg_match('~InvalidRegular)Expression~', '') === false);
正如用户pozs所说,还要考虑在测试环境中将@
放在preg_match()()前面,以防止警告或通知。@preg_match()
要验证正则表达式,只需针对 null
运行它(无需预先知道要测试的数据)。。如果它返回显式 false (),则它已损坏。否则它是有效的,尽管它不需要匹配任何东西。=== false
因此,无需编写自己的正则表达式验证程序。这是浪费时间...
我创建了一个简单的函数,可以调用它来检查preg
function is_preg_error()
{
$errors = array(
PREG_NO_ERROR => 'Code 0 : No errors',
PREG_INTERNAL_ERROR => 'Code 1 : There was an internal PCRE error',
PREG_BACKTRACK_LIMIT_ERROR => 'Code 2 : Backtrack limit was exhausted',
PREG_RECURSION_LIMIT_ERROR => 'Code 3 : Recursion limit was exhausted',
PREG_BAD_UTF8_ERROR => 'Code 4 : The offset didn\'t correspond to the begin of a valid UTF-8 code point',
PREG_BAD_UTF8_OFFSET_ERROR => 'Code 5 : Malformed UTF-8 data',
);
return $errors[preg_last_error()];
}
您可以使用以下代码调用此函数:
preg_match('/(?:\D+|<\d+>)*[!?]/', 'foobar foobar foobar');
echo is_preg_error();
替代方案 - 正则表达式在线测试仪