如何用PHP验证正则表达式
我希望能够验证用户输入的正则表达式,以检查它是否有效。 首先我用PHP的filter_var
发现了FILTER_VALIDATE_REGEXP
常量,但这并不符合我的要求,因为它必须将正则表达式传递给选项,但我不会对任何东西进行正则表达式,所以基本上它只是检查正则表达式的有效性。
但是你明白了,我如何验证用户输入的正则表达式(与什么都不匹配)。
以简单的语言验证的例子:
$user_inputted_regex = $_POST['regex']; // e.g. /([a-z]+)..*([0-9]{2})/i
if(is_valid_regex($user_inputted_regex))
{
// The regex was valid
}
else
{
// The regex was invalid
}
验证示例:
/[[0-9]/i // invalid
//(.*)/ // invalid
/(.*)-(.*)-(.*)/ // valid
/([a-z]+)-([0-9_]+)/i // valid
这是一个想法(演示):
function is_valid_regex($pattern)
{
return is_int(@preg_match($pattern, ''));
}
preg_match()返回模式匹配的次数。 这将是0次(不匹配)或1次,因为preg_match()将在第一次匹配后停止搜索。
如果发生错误,preg_match()返回FALSE。
为了弄清楚模式无效的原因,使用preg_last_error
。
你需要编写自己的函数来验证正则表达式。 您可以验证它是否包含非法字符或不正确的形式,但无法测试它是否是一个工作表达式。 为此,您需要创建一个解决方案。
但是,然后你会意识到真的不存在无效的正则表达式。 正则表达式是基于性能的。 无论是匹配还是不匹配,这都取决于测试的主题 - 即使表达式或其结果看起来毫无意义。
换句话说,你只能测试正则表达式的有效语法......并且几乎可以做任何事情!
链接地址: http://www.djcxy.com/p/76751.html