如何验证正则表达式?

新手上路,请多包涵

我想测试 PHP 中正则表达式的有效性,最好是在使用它之前。执行此操作的唯一方法是实际尝试 preg_match() 并查看它是否返回 FALSE 吗?

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

原文由 Ross McFarlane 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 645
2 个回答
// 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() ) 前面,以防止出现警告或通知。

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

因此无需编写您自己的 RegExp 验证器。 这是浪费时间…

原文由 CodeAngry 发布,翻译遵循 CC BY-SA 4.0 许可协议

我创建了一个简单的函数,可以调用它来检查 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();

替代方案 - 正则表达式在线测试器

原文由 Wahyu Kristianto 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏