regexpr与preg_match(),模式生成错误

时间:2017-06-15 13:38:53

标签: php regex

在旧版本的docebo cms中 有一个preg_match()的检查,但是会生成错误并返回false, 显然,有些东西不符合这种模式 但可能使用较旧的PHP版本 有谁知道错误在哪里,以及如何纠正?

$str="my_session";
clean_input_keys($str);

protected function clean_input_keys($str) {
    $pattern = '#^[&a-zA-Z0-9\.:_/-\s]+$#uD';
    $b_preg_match = preg_match($pattern, $str);
    var_dump($b_preg_match); //false //preg_match() returns FALSE if an error occurred. 
    if ( ! $b_preg_match) {
        exit('Disallowed key characters in global data.');
    }
    return $str;
}

1 个答案:

答案 0 :(得分:2)

请注意,如果模式中存在错误,preg_match将返回false:

  如果模式与给定主题匹配,则

preg_match()返回1,否则返回0;如果发生错误,则返回 FALSE

错误PHP throws

  

PHP警告:preg_match():编译失败:第5行/home/VaTQ68/prog.php中偏移量为19的字符类中的无效范围

字符类中未转义的连字符可能形成范围。未定义/\s之间的范围,因此错误。

您需要将连字符放在字符类的结尾或开头,或者将其转义:

$pattern = '#^[&a-zA-Z0-9\.:_/\s-]+$#uD';
                                ^

请参阅PHP demo