ユーザーがパスワードを変更した場合、PHP でチェックを試みています。新しいパスワードは 8 文字以上で、少なくとも 1 つの英数字以外のパスワードを使用する必要があります。これを確認するにはどうすればよいですか?正規表現は何ですか?
長さのチェックは簡単strlen >= 8
です。私の問題は正規表現です。何年にもわたってコンピュータ サイエンスを勉強してきましたが、正規表現についてはまったくわかりません。
ありがとう
ユーザーがパスワードを変更した場合、PHP でチェックを試みています。新しいパスワードは 8 文字以上で、少なくとも 1 つの英数字以外のパスワードを使用する必要があります。これを確認するにはどうすればよいですか?正規表現は何ですか?
長さのチェックは簡単strlen >= 8
です。私の問題は正規表現です。何年にもわたってコンピュータ サイエンスを勉強してきましたが、正規表現についてはまったくわかりません。
ありがとう
次のようにして、英数字以外の文字が使用されているかどうかを確認します。
if( !preg_match( '/[^A-Za-z0-9]+/', $password) || strlen( $password) < 8)
{
echo "Invalid password!";
}
リストにない文字 (英数字) が少なくとも 1 つ含まれていない場合、ステートメントif
は に評価されます。true
$password
これは動作するはずです(テストされていません)
if (preg_match('/^(?=.*[\W])(?=[a-z0-9])[\w\W]{8,}$/i', '123abc!$'))
{
//error
}
パスワードの長さが 8 文字で、少なくとも 1 つの特殊文字が含まれていることを確認します。
私の知る限り、これは複合条件シナリオであるため、これを達成することはできません。
あなたがする必要があるのは、3つのステップでそれを行うことです:
$has8characters = (mb_strlen($_REQUEST['password']) >= 8);
$hasAlphaNum = preg_match('b[a-z0-9]+bi', $_REQUEST['password']);
$hasNonAlphaNum = preg_match('b[\!\@#$%\?&\*\(\)_\-\+=]+bi', $_REQUEST['password']);
これはテストされていませんが、これで達成したいことにかなり近づいています...
幸運を
これを試して。
~^(.*[\W]+.*){8,}$~
strlen/mb_strlen で文字列の長さをチェックしている場合は、英数字以外の任意の文字に一致する正規表現を簡単に記述できます。1 つ (または複数) 一致する場合は、問題ありません。例えば:
$password = 'asdf123!';
if(mb_strlen($password) >= 8 and preg_match('/[^0-9A-Za-z]/', $password))
{
// password is valid
}