测试字符串是否为正则表达式

2022-08-30 14:35:56

有没有一种好方法可以测试字符串是否是PHP中的正则表达式或普通字符串?

理想情况下,我想写一个函数来运行一个字符串,返回true或false。

我看了一下:preg_last_error()

<?php
preg_match('/[a-z]/', 'test');
var_dump(preg_last_error());
preg_match('invalid regex', 'test');
var_dump(preg_last_error());
?>

显然,第一个不是错误,第二个是错误的。但两次都会返回。preg_last_error()int 0

有什么想法吗?


答案 1

测试字符串是否为正则表达式的最简单方法是:

if( preg_match("/^\/.+\/[a-z]*$/i",$regex))

这将告诉您字符串是否很有可能被设计为正则表达式。但是,有许多字符串可以通过该检查,但无法成为正则表达式。中间的斜杠未转义,末尾的未知修饰符,不匹配的括号等都可能导致问题。

返回 0 的原因是因为“无效正则表达式”不是:preg_last_error

  • PREG_INTERNAL_ERROR(内部错误)
  • PREG_BACKTRACK_LIMIT_ERROR(过度强制回溯)
  • PREG_RECURSION_LIMIT_ERROR(过度递归)
  • PREG_BAD_UTF8_ERROR(格式不正确的 UTF-8)
  • PREG_BAD_UTF8_OFFSET_ERROR(偏移到 UTF-8 字符的中间)

答案 2

这是一个很好的答案:

https://stackoverflow.com/a/12941133/2519073

if(@preg_match($yourPattern, null) === false){
    //pattern is broken
}else{
    //pattern is real
}

推荐