2016-08-05 8 views
1

私のフォームからログインとパスワードを確認しています。特別な文字は使用しないでください。 コメント付きのreturn var_dumpは私にログインとパスワードの値を正しく示しています。 残念ながら、ifelseはまったく返されません。 なぜそれが起こりますか?preg_matchが動作しないelseステートメントがある場合

$usernCheck = $_POST['usern']; 
$passCheck = $_POST['passn']; 
// return var_dump($usernCheck.$passCheck); 

if((preg_match("[email protected]#$%^&*()_+-=,./<>?;':\"{}[]", $usernCheck) !== false) 
    OR (preg_match("[email protected]#$%^&*()_+-=,./<>?;':\"{}[]", $passCheck) !== false)){ 
    return "Found special chars."; 
} else { 
    return "Not found special chars."; 
} 

答えて

1

preg_matchエラーが発生した場合にのみfalseを返します。パターンが一致しない場合0を返しますので、!== falseを使用すると、おそらく良い比較ではありません。0 == false(等価)、0 !== false(同一性)です。

正規表現を完全に見直さずに、返り値preg_matchをブール値として評価することをお勧めします。一致するものが見つかった場合は、1が返され、trueと評価されます。

if(preg_match($pattern, $usernCheck) || preg_match($pattern, $passCheck) { 
    return "Found special chars."; 
} else { 
    return "Not found special chars."; 
} 

あなたの正規表現ビットを確認した後、それは文字が正規表現に意味や必要になったの多くのように見えるエスケープすると、文字のセットがでどの文字に一致する[]で囲む必要がありますリストではなく、すべてです。次のようなものがあります。

'[[email protected]#\$%\^\&\*\(\)_\+-=,\.\/<>\?;\':\"{}\[\]]' 

その他の特殊文字がある場合があります。特定のブラックリストに入れる代わりにの文字をにすることをお勧めします。

関連する問題