3

私はこの(ほぼ)複雑なパスワード検証を使用します:

function is_password($password) {
    return preg_match("^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$", $password);
}

したがって、次のものが含まれている必要があります。

  • 0〜9の1桁、
  • 1つの小文字、
  • 1つの大文字、
  • 最低6文字
  • 最大20文字

これは機能していないようです。、、、、、、などeの特定tの文字を入力するときはいつoでも; 許可された長さが正しい場合、関数はtrueを返します。したがって、大文字と数字は検証されていません。jcb

私は何が間違っているのですか?

4

2 に答える 2

7

delimitersを使用するのを忘れました。代わりに次のコードを使用してください。

return preg_match("/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$/", $password);

または、各条件を分割して次のコードを使用することもできます。

return mb_strlen($password)>=6 && mb_strlen($password)<=20
       && preg_match("/[a-z]+/", $password) && preg_match("/[A-Z]+/", $password)
       && preg_match("/[0-9]+/", $password);
于 2012-11-14T17:40:56.667 に答える
6

これを複数のチェックに分割します。これにより、パスワードの選択に失敗した理由について、ユーザー (またはログ) にインテリジェントにフィードバックを提供できます。

<?php
function is_password($password){
    if (strlen($password) < 6) {
        // too short
        return false;
    }
    if (strlen($password) > 20) {
        // too long
        return false;
    }
    if (!preg_match("/[A-Z]/", $password) {
        // no upper
        return false;
    }
    if (!preg_match("/[a-z]/", $password) {
        // no lower
        return false;
    }
    if (!preg_match("/[0-9]/", $password) {
        // no digit
        return false;
    }
    return true;
}
?>
于 2012-11-14T17:45:36.593 に答える