電子書籍の厳選無料作品が豊富!

プログラム初心者です

パスワードチェックする方法をおしえてください

質問1
半角英数字で8文字。その中に数字が含まれているかチェックしたいです
今までは数字が含まれているかチェックできていませんでした

if(!preg_match("/^[a-zA-Z0-9]+$/", $pass) ||(strlen($pass) < 8)){
print "8文字以上の半角英字の中に数字を混ぜてください";
}

質問2
暗号化する前にmysqli_real_escape_stringで処理させてもいいですか?それとも暗号化した後にmysqli_real_escape_stringで処理させたほうがいいですか?

$pass = mysqli_real_escape_string($link,$pass);
$pass=hash('sha256',$pass);
この下にDBに入れる処理

よろしくお願いします

A 回答 (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文字以上で構成してください';
}

この回答への補足

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

補足日時:2013/11/28 23:10
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/11/28 23:01

こっちの方がいいかも・・・



$regex = '/(?!\A[a-z]\z)(?!\A\d\z)\A[a-z\d]{8,}+\z/i';
if (!preg_match($regex, $pass)) {
 echo '半角数字1文字以上・半角英字1文字以上・計8文字以上で構成してください';
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/11/28 23:16

【回答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);
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/11/28 23:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!