4

ユーザーがパスワードを変更した場合、PHP でチェックを試みています。新しいパスワードは 8 文字以上で、少なくとも 1 つの英数字以外のパスワードを使用する必要があります。これを確認するにはどうすればよいですか?正規表現は何ですか?

長さのチェックは簡単strlen >= 8です。私の問題は正規表現です。何年にもわたってコンピュータ サイエンスを勉強してきましたが、正規表現についてはまったくわかりません。

ありがとう

4

6 に答える 6

5

次のようにして、英数字以外の文字が使用されているかどうかを確認します。

if( !preg_match( '/[^A-Za-z0-9]+/', $password) || strlen( $password) < 8)
{
    echo "Invalid password!";
}

リストにない文字 (英数字) が少なくとも 1 つ含まれていない場合、ステートメントifは に評価されます。true$password

于 2012-05-23T14:21:00.263 に答える
0

これは動作するはずです(テストされていません)

if (preg_match('/^(?=.*[\W])(?=[a-z0-9])[\w\W]{8,}$/i', '123abc!$'))
{
    //error
}

パスワードの長さが 8 文字で、少なくとも 1 つの特殊文字が含まれていることを確認します。

于 2012-05-23T14:19:28.297 に答える
0

私の知る限り、これは複合条件シナリオであるため、これを達成することはできません。

あなたがする必要があるのは、3つのステップでそれを行うことです:

$has8characters = (mb_strlen($_REQUEST['password']) >= 8);
$hasAlphaNum = preg_match('b[a-z0-9]+bi', $_REQUEST['password']);
$hasNonAlphaNum = preg_match('b[\!\@#$%\?&\*\(\)_\-\+=]+bi', $_REQUEST['password']);

これはテストされていませんが、これで達成したいことにかなり近づいています...

幸運を

于 2012-05-23T14:22:26.677 に答える
0

これを試して。

~^(.*[\W]+.*){8,}$~
  • .* 任意の文字を 0 回以上検索します
  • [\W]+ 少なくとも 1 つの単語以外の文字に一致
  • {8,} は、長さが 8 文字以上の場合にのみ、括弧で囲まれた値と一致します
  • ^ $ 文字列の先頭と末尾に一致
于 2012-05-23T14:44:29.390 に答える
0

strlen/mb_strlen で文字列の長さをチェックしている場合は、英数字以外の任意の文字に一致する正規表現を簡単に記述できます。1 つ (または複数) 一致する場合は、問題ありません。例えば:

$password = 'asdf123!';

if(mb_strlen($password) >= 8 and preg_match('/[^0-9A-Za-z]/', $password))
{
    // password is valid
}
于 2012-05-23T14:20:50.017 に答える