2017-06-15 78 views
0

在老版本的docebo cms中 有一個preg_match()檢查,但是會產生錯誤並返回false, 很明顯,有些東西在模式中沒有進行 但可能與一個較舊的PHP版本,它的工作 有誰知道錯誤在哪裏,它將如何糾正?regexpr with preg_match(),pattern generate error

$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

?你讀過錯誤信息了嗎? –

+1

片段'/ - \ s'似乎不是有效的。我會建議用'/ \ s-'代替。 –

+0

確切地說,現在試圖在這裏指定一個_character class_「from/to whitespace」,這當然沒有意義。 (順便提一下,下次引用錯誤信息,而不是僅僅告訴我們你有一個......) – CBroe

回答

2

注意,如果在該圖案的誤差preg_match返回false:

preg_match()返回1,如果該模式匹配,如果一個錯誤定受試者,0,如果沒有,或FALSE發生。

誤差PHP throws

PHP警告:的preg_match():編譯失敗:無效範圍在字符類偏移量19 /home/VaTQ68/prog.php第5行

角色類中的非轉義連字符可能會形成一個範圍。沒有定義/\s之間的範圍,因此是錯誤。

你需要把連字符在年底或字符類的開始,或逃避它:

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

是否使用蘋果開發者庫查看PHP demo