2017-06-15 4 views
0

旧バージョンのdocebo cms preg_match()でエラーが発生し、falseを返すチェックがあります。 明らかにパターンには含まれていないものがあります しかし、それはおそらく古いPHPバージョンで動作します 誰かが間違いがどこにあるか知っていますか?どのように修正されますか?regexprとpreg_match()、パターン生成エラー

$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"を指定しようとしていますが、当然意味がありません。 (Btw。、次回はエラーメッセージが表示されます。あなたには1つしかありません...) – CBroe

答えて

2

preg_match戻るパターンに誤りがある場合に注意:エラー場合

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

関連する問題