0

次のルールをテストする正規表現があります。

  1. パスワードには少なくとも1文字が必要です。
  2. パスワードには、少なくとも1つの数値が必要です。
  3. パスワードには、少なくとも1文字の英数字が必要です(1文字以上許可する必要があります)

私の試みはこれです、

/^([a-zA-Z+]+[0-9+]+[!@#$%^&*])$/

これは、1つ以上の英数字を追加する場合を除いて、ほとんどの場合と同様に正常に機能します。

テスト

  • テスト[qwer1234]結果[無効]結論[合格]
  • テスト[qwer1234$]結果[有効]結論[合格]
  • テスト[qwer1234#$]結果[無効]結論[失敗]

最後のテストは合格するはずですが、失敗します。どこが間違っているかはわかっていますが、正規表現の魔法にこだわることができませんでした。何が悪いのかについての私の考えは、

[0-9+] // This + sign shows that you can have more then 1 of that range of numerics

どこ、

[!@#$%^&*] // Does not have the + sign

私は試した、

[!@#$%^&*+] // Does not have the + sign
[!@#$%^&*]+ // Does not have the + sign

両方とも機能しませんでした。私は何が欠けていますか?

4

3 に答える 3

1

実際に必要なものに応じて、状況の紛らわしい説明から、私が助けてくれることを願っている2つの正規表現があります. この最初のパスワードでは、パスワードが少なくとも 1 つの英字で始まり、次に少なくとも 1 つの数字があり、最後に少なくとも 1 つの特殊文字が含まれている必要があります。

/^([a-zA-Z]+[0-9]+[!@#$%^&*]+)$/

http://jsfiddle.net/ECwP8/

文字を特定の順序で並べる必要がない場合は、次の正規表現を試すことができます。

/(?=[^a-zA-Z]*[a-zA-Z])(?=[^0-9]*[0-9])(?=[^!@#$%^&*]*[!@#$%^&*])/

http://jsfiddle.net/bJTTk/1/

これは、少なくとも 1 つの英字、少なくとも 1 つの数字、および少なくとも 1 つの特殊文字が任意の順序でパスワードに出現することを単に必要とします。

于 2013-01-23T02:33:32.830 に答える
1

すべてを 1 つの正規表現にまとめる必要があるのはなぜですか?

function test_password(password) {
    if (password.length < 2) return false;            // Minimum length
    if (!/[0-9]/g.test(password)) return false;       // Needs a number
    if (!/[a-z]/gi.test(password)) return false;      // Needs a letter
    if (!/[^a-z0-9]/gi.test(password)) return false;  // Needs a special char

    return true;
}
于 2013-01-23T02:32:12.117 に答える
0

以下を試してください。文字が最初に、数字が 2 番目に、英数字がその次にある場合に機能します。

/^[a-zA-Z]+[1-9]+[!@#$%^&*]+$/

于 2013-01-23T02:38:50.720 に答える