如何确定字符串是否是PHP正则表达式?

时间:2013-03-26 19:51:44

标签: php regex validation

有没有办法在@preg_match上使用错误控制运算符? :)

因为PHP要求模式包含在一个字符之间,所以我想这样做:

  1. 获取第一个角色。
  2. 使用以下字符查找字符串中此字符的最后一次出现:

    $rpos = strrpos($string, $string[0]);
    
  3. 获取修饰符列表:

    $mods = substr($rpos, strlen($string));
    
  4. Find out if there are any invalid modifiers in this list。如果返回false,则正则表达式似乎有效。
  5. 这个解决方案有多可靠?还有更好的吗?

2 个答案:

答案 0 :(得分:2)

我总是在Symfony2 Finder组件中使用this function

if (preg_match('/^(.{3,}?)([imsxuADU]*)$/', $expr, $m)) {
    $start = substr($m[1], 0, 1);
    $end   = substr($m[1], -1);

    if (($start === $end && !preg_match('/[*?[:alnum:] \\\\]/', $start)) || ($start === '{' && $end === '}')) {
        // It's a regex!
    }
}

答案 1 :(得分:1)

在纪念中,它已经在很短的路程中描述过。 但您可以使用filter_var方法

检查正则表达式是否正常
$string = "String to match";

if (filter_var($string, FILTER_VALIDATE_REGEXP, array("options" => array("regexp" =>  "/abc/")))) {
    echo "Regex is OK";
} else {
    echo "Regex not okay";
}