• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:パスワードチェック)

パスワードチェックの方法と暗号化処理の順番についての質問

このQ&Aのポイント
  • 半角英数字で8文字以上のパスワードに数字が含まれているかチェックする方法を教えてください。
  • パスワードを暗号化する前にmysqli_real_escape_stringで処理させるか、暗号化した後に処理させるかについて教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答No.3

連投すみません訂正です $regex = '/(?!\A[a-z]*+\z)(?!\A\d*+\z)\A[a-z\d]{8,}+\z/i'; if (!preg_match($regex, "fwaaaaaaaaaaaaaaaa")) { echo '半角数字1文字以上・半角英字1文字以上・計8文字以上で構成してください'; }

flash0
質問者

お礼

回答ありがとございます if (!preg_match($regex, $pass)) { で試してみましたが数字が含まれてる場合でも登録できませんでした

flash0
質問者

補足

すいません。ミスってました

その他の回答 (2)

noname#244856
noname#244856
回答No.2

こっちの方がいいかも・・・ $regex = '/(?!\A[a-z]\z)(?!\A\d\z)\A[a-z\d]{8,}+\z/i'; if (!preg_match($regex, $pass)) {  echo '半角数字1文字以上・半角英字1文字以上・計8文字以上で構成してください'; }

flash0
質問者

お礼

いろいろありがとうございます うまくいきました

noname#244856
noname#244856
回答No.1

【回答1】 「^」「$」は改行コードを許してしまうのでこういう厳密な正規表現が必要なときは絶対に「\A」「\z」で。また数字だけの場合もダメだと思うので、数字と英字のペアにさせましょう。今回は条件付きサブパターンというPCREの機能を利用します。 $regex = '/\A(\d)[a-zA-Z\d]*?(?(1)[a-zA-Z]|\d)[a-zA-Z\d]*?\z/'; if (!preg_match($regex, $pass) || strlen($pass) < 8)) { ____echo '半角数字1文字以上・半角英字1文字以上・計8文字以上で構成してください'; } 【回答2】 暗号化「後」です。 $pass = hash('sha256', $pass); $pass = mysqli_real_escape_string($link, $pass);

flash0
質問者

お礼

回答ありがとうございます うまくいきました。 考えてみれば暗号化後でした。修正しました