我想测试 PHP 中正则表达式的有效性,最好是在使用它之前。执行此操作的唯一方法是实际尝试 preg_match()
并查看它是否返回 FALSE
吗?
是否有更简单/正确的方法来测试有效的正则表达式?
原文由 Ross McFarlane 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想测试 PHP 中正则表达式的有效性,最好是在使用它之前。执行此操作的唯一方法是实际尝试 preg_match()
并查看它是否返回 FALSE
吗?
是否有更简单/正确的方法来测试有效的正则表达式?
原文由 Ross McFarlane 发布,翻译遵循 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 许可协议
2 回答3.1k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读
2 回答1.2k 阅读
1 回答1.2k 阅读
正如用户 pozs 所说,还可以 考虑在测试环境中将
@
放在 preg_match() (@preg_match()
) 前面,以防止出现警告或通知。要验证 RegExp,只需针对
null
运行它 (不需要预先知道要测试的数据) 。如果它返回明确的 false (=== false
),它就坏了。否则它是有效的,尽管它不需要匹配任何东西。因此无需编写您自己的 RegExp 验证器。 这是浪费时间…