在旧版本的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;
}
答案 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