83

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

  • 少なくとも8文字を含む
  • 少なくとも1つの番号が含まれています
  • 少なくとも1つの小文字(az)を含む
  • 少なくとも1つの大文字(AZ)を含む
  • 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");
    }

});

何か案は?

4

4 に答える 4

235

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

/^(?=.*\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
$/
于 2013-02-13T09:56:58.083 に答える
23

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

.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
    });
});

作業デモ

于 2013-02-13T09:56:50.990 に答える
10

少なくとも8= {8,}

str.match(/^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])([a-zA-Z0-9]{8,})$/)
于 2013-02-13T09:51:11.137 に答える
2

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

しかし、なぜパスワードに許可される文字範囲を制限するのでしょうか。8文字の英数字のパスワードは、数分以内に私の電話によってブルートフォースされる可能性があります 。

于 2013-02-13T09:50:06.930 に答える