4

次のルールでパスワードを検証するためのヘルプを探しています。

8文字以上

少なくとも 1 つの大文字を含む

少なくとも 1 つの小文字を含む

少なくとも 1 つの数値を含む

数字で始めることはできません

特殊文字を含まない

私は次のようになりました:

(?=.*\d.*)(?=.*[a-z].*)(?=.*[A-Z].*)(?=.*[!#\$%&\?].*).{8,}

しかし、最初の数字を数字と一致させず、特殊文字クラスも一致しないように設定する方法を理解できないようです。どんな助けでも大歓迎です。

4

3 に答える 3

4

これを個々のテストに分解すると、次のようになります。

  • コーディングしやすい
  • 読みやすい
  • メンテナンスが容易
  • 要件が変更されたときの柔軟性

次のようなことを試してください:

var testPassword = function (password) {
    var minLengthMet = password.length >= 8,
        hasUpper = (/[A-Z]+/).test(password),
        hasLower = (/[a-z]+/).test(password),
        hasNumber = (/[0-9]+/).test(password),
        letterBegin = (/^[A-Za-z]/).test(password),
        noSpecials = !(/[^A-Za-z0-9]+/).test(password);
    return minLengthMet && hasUpper && hasLower && hasNumber && letterBegin && noSpecials;
};

ここで実際の動作を確認してください: http://jsfiddle.net/H9twa/

于 2013-06-07T14:00:41.880 に答える
3

どうですか:

pwd.length >= 8 &&
pwd.match(/[A-Z]/) &&
pwd.match(/[a-z]/) &&
pwd.match(/\d/) &&
!pwd.match(/^\d/) &&
!pwd.match(/[!#\$%&\?]/);

このコードを維持する必要がある場合に備えて?

于 2013-06-07T14:00:34.897 に答える