我如何验证正则表达式?

我想在PHP中测试正则表达式的有效性,最好在使用之前。 是否只有这样做才能真正尝试preg_match()并查看它是否返回FALSE

有没有更简单/正确的方法来测试有效的正则表达式?


// This is valid, both opening ( and closing )
var_dump(preg_match('~Valid(Regular)Expression~', null) === false);
// This is invalid, no opening ( for the closing )
var_dump(preg_match('~InvalidRegular)Expression~', null) === false);

正如用户pozs所说的那样,还可以考虑在测试环境@preg_match() @放在preg_match()@ preg_match())的前面以防止警告或通知。

要验证RegExp,只需针对null运行它 (不需要知道要预先测试的数据)。 如果它返回明确的错误( === false ),它就会被破坏。 否则它是有效的,尽管它不需要匹配任何东西。

所以不需要编写自己的RegExp验证器。 这是浪费时间...


我创建了一个可以调用来检查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();

另类 - 正则表达式在线测试器

  • RegExr
  • PHP正则表达式测试器
  • 正则表达式工具

  • 如果你想动态测试一个正则表达式preg_match(...) === false似乎是你唯一的选择。 PHP在使用前没有编译正则表达式的机制。

    你也可能会发现preg_last_error是一个有用的函数。

    另一方面,如果你有一个正则表达式,并且想在使用它之前知道它是否有效,那么就有一堆工具可用。 我发现rubular.com使用起来很愉快。

    链接地址: http://www.djcxy.com/p/76739.html

    上一篇: How can I validate regex?

    下一篇: Regex that Evaluates Regexes