[英]PHP regexp for a valid regexp pattern
是否有正则表达式来检查字符串是否是有效的 php 正则表达式?
在我的应用程序的后台,管理员定义数据类型,他可以将模式定义为正则表达式。 例如/^[AZ][a-zA-Z]+[az]$/
在前台,我使用这种模式来验证用户条目。 在我的代码中,我使用 PHP preg_match
function
preg_match($pattern, $user_entries);
第一个参数必须是有效的 PHP 正则表达式,我如何确定 $pattern 是有效的正则表达式,因为它是我后台的用户条目。
任何想法?
执行它并捕获任何警告。
$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
- 不过这不会给您错误消息。
从技术上讲,任何表达式都可以是有效的正则表达式......
因此,正则表达式的有效性将取决于您要遵守的规则。
我会:
preg_match
或substr
的某种组合来验证模式作为一种解决方法,您可以尝试使用正则表达式并查看是否发生错误:
function is_regex($pattern)
{
return @preg_match($pattern, "") !== false;
}
function preg_match()
在错误时返回false
,在执行时返回int
且没有错误。
背景:我不知道正则表达式本身是否形成正则语法,即原则上是否可以用正则表达式验证正则表达式。 通用方法是开始解析并检查是否发生错误,这就是变通方法的作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.