0

重複の可能性:
パスワード検証の正規表現

8 ~ 16 文字で、3 つの文字クラス (アルファベットの大文字と小文字、数字、記号) のそれぞれから少なくとも 1 文字を使用します。

私はこのコードを持っていますが、16文字以上書くとうまくいきませんが、有効ではありません。3 つの文字クラスで正常に動作するはずですが、4 で動作します。私の間違いはどこですか??

http://jsbin.com/ugesow/1/edit

<label for="pass">Enter Pass: </label>
<input type="text" id="pass" onkeyup="validate()">

脚本

function validate() {
    valor = document.getElementById('pass').value;
    if (!(/(?=.{8,16})(?=.*?[^\w\s])(?=.*?[0-9])(?=.*?[A-Z]).*?[a-z].*/.test(valor))) {

        document.getElementById('pass').style.backgroundColor = "red";
    } else {
        document.getElementById('pass').style.backgroundColor = "#adff2f";
    }
}
4

4 に答える 4

1

正規表現は万能薬ではありません。通常のコードと組み合わせれば、それほど難しいことではありません。

function validatePassword(password) {
    // First, check the length.
    // Please see my comment on the question about maximum password lengths.
    if(password.length < 8 || password.length > 16) return false;
    // Next, check for alphabetic characters.
    if(!/[A-Z]/i.match(password)) return false;
    // Next, check for numbers.
    if(!/\d/.match(password)) return false;
    // Next, check for anything besides those.
    if(!/[^A-Z\d]/i.match(password)) return false;
    // If we're here, it's valid.
    return true;
}

ただし、パスワードチェッカーであるzxcvbnのようなものを調べます。これは、より優れたパスワード品質チェッカーであり、un- 13375p3/-\k 化後の一般的な辞書の単語などをチェックし、エントロピーを適切に処理します。とりわけ、Dropbox によって使用されます。ここで試してみてください。

于 2013-02-05T01:52:41.543 に答える
0

一致を文字列の先頭に固定し、最初の先読みを最後に固定する必要があります。

^(?=.{8,16}$)

また、最後の先読みは 2 つに分割する必要があります。

(?=.*?[A-Z])(?=.*?[a-z])
于 2013-02-05T01:46:58.580 に答える
-3

正規表現を使用して3つの文字セットをテストしてみませんか。

[A-Za-z0-9]+

次に、文字列の長さを数えて、長さを検証します。

于 2013-02-05T01:37:31.653 に答える
-3

この範囲はどうですか:

/[A-Za-z0-9$-/:-?{-~!"^_`\[\]]/

最初に確認できるように

/[A-Za-z]+/ 

それから

/\d+/ 

そして最後に

/[$-/:-?{-~!"^_`\[\]]+/  

合格した場合は、長さを確認できます。

このリンクを参照して、シンボルが機能する理由を確認できます。

于 2013-02-05T01:44:23.583 に答える