PHP正则表达式有效的正则表达式模式

时间:2011-07-07 13:46:44

标签: php regex

是否有正则表达式来检查字符串是否是有效的php regexp?

在我的应用程序的后台,管理员定义数据类型,他可以将模式定义为正则表达式。例如/^[A-Z][a-zA-Z]+[a-z]$/,在前台,我使用此模式验证用户条目。 在我的代码中,我使用PHP preg_match函数

preg_match($pattern, $user_entries); 

第一个参数必须是有效的PHP正则表达式,我怎么能确定$ pattern是一个有效的正则表达式,因为它是一个用户在我的后台办公室。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

执行它并捕获任何警告。

$track_errors = ini_get('track_errors');
ini_set('track_errors', 'on');
$php_errormsg = '';
@preg_match($regex, 'dummy');
$error = $php_errormsg;
ini_set('track_errors', $track_errors);
if($error) {
    // do something. $error contains the PHP warning thrown by the regex
}

如果你只是想知道正则表达式是否失败,你可以简单地使用preg_match($regex, 'dummy') === false - 但这不会给你一个错误信息。

答案 1 :(得分:0)

作为解决方法,您可以尝试使用正则表达式并查看是否发生错误:

function is_regex($pattern)
{
  return @preg_match($pattern, "") !== false;
}

函数preg_match()在出错时返回false,在执行时没有错误返回int

背景:我不知道正则表达式本身是否形成常规语法,即原则上是否可以用正则表达式验证正则表达式。通用方法是开始解析并检查是否发生错误,这就是解决方法的作用。

答案 2 :(得分:0)

从技术上讲,任何表达式都可以是有效的正则表达式...

因此,正则表达式的有效性取决于您想要遵守的规则。

我会:

  1. 确定正则表达式必须执行的规则
  2. 使用您自己的preg_matchsubstr的某种组合来验证模式

答案 3 :(得分:0)

您可以使用T-Regx库,该库本身会抛出InvalidPatternException

try {
    pattern('Invalid (regexp')->match('foo bar')->first();
}
catch (InvalidPatternException $e) {

}