首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PHP验证正则表达式

问如何使用PHP验证正则表达式
EN

Stack Overflow用户
提问于 2012-04-07 03:15:57
回答 2查看 599关注 0票数 7

我希望能够验证用户输入的正则表达式,以检查它是否有效。我在PHP的filter_var中发现的第一件事是FILTER_VALIDATE_REGEXP常量,但这并不是我想要的,因为它必须将正则表达式传递给选项,但我并没有针对任何东西进行正则表达式,所以基本上它只是检查正则表达式的有效性。

但是你明白了,我该如何验证用户输入的正则表达式(它不匹配任何内容)。

简单地说,验证的示例:

代码语言:javascript
复制
$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
}

验证示例:

代码语言:javascript
复制
/[[0-9]/i              // invalid
//(.*)/                // invalid
/(.*)-(.*)-(.*)/       // valid
/([a-z]+)-([0-9_]+)/i  // valid
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-07 03:39:50

这是一个想法(demo):

代码语言:javascript
复制
function is_valid_regex($pattern)
{
    return is_int(@preg_match($pattern, ''));
}

preg_match()返回模式匹配的次数。这要么是0次(不匹配),要么是1次,因为preg_match()将在第一次匹配后停止搜索。

如果发生错误,preg_match()将返回FALSE。

要获得该模式无效的原因,请使用preg_last_error。

票数 6
EN

Stack Overflow用户

发布于 2012-04-07 03:27:47

您需要编写自己的函数来验证正则表达式。到目前为止,您可以验证它是否包含非法字符或格式错误,但无法测试它是否为工作表达式。为此,您需要创建一个解决方案。

但是,您确实意识到,实际上并不存在无效的正则表达式。正则表达式是基于性能的。它要么匹配,要么不匹配,这取决于测试的主题--即使表达式或其结果看起来毫无意义。

换句话说,您只能测试有效syntax...and的正则表达式,它几乎可以是任何内容!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10048147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档