是否有正则表达式来检查字符串是否是有效的php regexp?
在我的应用程序的后台,管理员定义数据类型,他可以将模式定义为正则表达式。例如/^[A-Z][a-zA-Z]+[a-z]$/
,在前台,我使用此模式验证用户条目。
在我的代码中,我使用PHP preg_match
函数
preg_match($pattern, $user_entries);
第一个参数必须是有效的PHP正则表达式,我怎么能确定$ pattern是一个有效的正则表达式,因为它是一个用户在我的后台办公室。
有什么想法吗?
答案 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)
从技术上讲,任何表达式都可以是有效的正则表达式...
因此,正则表达式的有效性取决于您想要遵守的规则。
我会:
preg_match
或substr
的某种组合来验证模式答案 3 :(得分:0)
您可以使用T-Regx库,该库本身会抛出InvalidPatternException
try {
pattern('Invalid (regexp')->match('foo bar')->first();
}
catch (InvalidPatternException $e) {
}