web-dev-qa-db-ja.com

少なくとも8文字、数字1、大文字1、小文字1を含むパスワードのjavascript正規表現

次の条件を満たす必要があるパスワードを検証するための正規表現を作成しようとしています。

  • 少なくとも8文字を含む
  • 少なくとも1つの数字を含む
  • 少なくとも1つの小文字(a-z)を含む
  • 少なくとも1つの大文字(A-Z)を含む
  • 0-9a-zA-Zのみを含む

以下を試してみましたが、うまくいかないようです。

http://jsfiddle.net/many_tentacles/Hzuc9/

<input type='button' value='click' class='buttonClick' />
<input type='text' />
<div></div>

そして...

$(".buttonClick").click(function () {

    if ($("input[type=text]").filter(function () {
        return this.value.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8})$/);
    })) {
        $("div").text("pass");
    } else {
        $("div").text("fail");
    }

});

何か案は?

61
Tom

正規表現は次のようになります。

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/

説明は次のとおりです。

/^
  (?=.*\d)          // should contain at least one digit
  (?=.*[a-z])       // should contain at least one lower case
  (?=.*[A-Z])       // should contain at least one upper case
  [a-zA-Z0-9]{8,}   // should contain at least 8 from the mentioned characters
$/
167
Minko Gechev

個々の正規表現を使用してさまざまな部分をテストする方が、すべての部分をカバーする単一の正規表現を取得するよりもかなり簡単です。また、検証基準を簡単に追加または削除できます。

また、.filter()の使用が間違っていたことにも注意してください。常にjQueryオブジェクトを返します(JavaScriptで真実と見なされます)。個人的には、.each()ループを使用してすべての入力を反復処理し、個々の合格/不合格ステータスを報告します。以下のようなもの:

$(".buttonClick").click(function () {

    $("input[type=text]").each(function () {
        var validated =  true;
        if(this.value.length < 8)
            validated = false;
        if(!/\d/.test(this.value))
            validated = false;
        if(!/[a-z]/.test(this.value))
            validated = false;
        if(!/[A-Z]/.test(this.value))
            validated = false;
        if(/[^0-9a-zA-Z]/.test(this.value))
            validated = false;
        $('div').text(validated ? "pass" : "fail");
        // use DOM traversal to select the correct div for this input above
    });
});

作業デモ

16
Anthony Grist

少なくとも8 = {8,}

str.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8,})$/)
3
nbrooks

正規表現では、正確に8文字しか使用できません。 {8,}の代わりに{8}を使用して8個以上を指定します。

しかし、パスワードに許可される文字範囲を制限するのはなぜですか? 8文字の英数字パスワードは、数分以内にmy phoneによってブルートフォースできます。

2
Tim Pietzcker