测试PHP中的正则表达式是否有效

Cra*_*zeD 13 php regex

我正在编写表单验证类,并希望在验证中包含正则表达式.因此,提供的正则表达式不保证有效.

我怎样(有效地)检查正则表达式是否有效?

Cha*_*rry 20

preg_*通话中使用模式.如果函数返回false,则模式可能存在问题.据我所知,这是检查正则表达式模式在PHP中是否有效的最简单方法.


这是一个指定正确类型的布尔检查的示例:

$invalidPattern = 'i am not valid regex';
$subject = 'This is some text I am searching in';
if (@preg_match($invalidPattern, $subject) === false) {
    // the regex failed and is likely invalid
}
Run Code Online (Sandbox Code Playgroud)

  • 只是为了强调,这是严格的(`===`)布尔值`false`,而不是假的(`==`)值,如`0`. (4认同)
  • @cspray我建议在你的preg_*调用之前用@来抑制PHP警告.即`if(@preg_match($ possibleInvalidPattern,'')=== false)`这可能是也可能不是问题,具体取决于你的[error_reporting](http://www.php.net/manual/en/function. error-reporting.php)级别. (3认同)
  • @CrazeD根据调用的函数和传递的选项,它可能是各种值.对于上面的情况,如果`$ subject`与`$ pattern`不匹配,并且有效,它将返回'0`.但是,`preg_replace`会在失败时返回`NULL`而不是false.您只需要查看您正在使用的特定功能的文档. (2认同)
  • 切勿使用@运算符.自从 (2认同)
  • 虽然我当然同意您不应该在几乎所有情况下使用“@”运算符,但在某些边缘情况下它的使用是有必要的。这显然是那些边缘情况之一。 (2认同)