繁体   English   中英

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

[英]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 - 不过这不会给您错误消息。

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

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

我会:

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

您可以使用T-Regx库:

<?php
if (pattern('invalid {{')->valid()) {

https://t-regx.com/docs/is-valid

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

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

function preg_match()在错误时返回false ,在执行时返回int且没有错误。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM