11

少なくとも 2 桁の数字と 1 つの特殊文字を受け入れ、最小パスワード長が 8 である正規表現を探しています。これまでのところ、次のことを行っています。[0-9a-zA-Z!@#$%0-9]*[!@#$%0-9]+[0-9a-zA-Z!@#$%0-9]*

4

6 に答える 6

33

このようなものがうまくいくはずです。

^(?=(.*\d){2})(?=.*[a-zA-Z])(?=.*[!@#$%])[0-9a-zA-Z!@#$%]{8,}

(?=(.*\d){2}) - uses lookahead (?=) and says the password must contain at least 2 digits

(?=.*[a-zA-Z]) - uses lookahead and says the password must contain an alpha

(?=.*[!@#$%]) - uses lookahead and says the password must contain 1 or more special characters which are defined

[0-9a-zA-Z!@#$%] - dictates the allowed characters

{8,} - says the password must be at least 8 characters long

必要な特殊文字を正確に指定するなど、少し調整する必要があるかもしれませんが、うまくいくはずです。

于 2013-10-21T10:35:27.967 に答える
8

単一の正規表現ですべてのルールを実装する理由はまったくありません。次のようにすることを検討してください。

Pattern[] pwdrules = new Pattern[] {
    Pattern.compile("........"),   // at least 8 chars
    Pattern.compile("\d.*\d"),     // 2 digits
    Pattern.compile("[-!"§$%&/()=?+*~#'_:.,;]") // 1 special char
  }

String password = ......;
boolean passed = true;

for (Pattern p : pwdrules) {
    Matcher m = p.matcher(password);
    if (m.find()) continue;
    System.err.println("Rule " + p + " violated.");
    passed = false;
}

if (passed) { .. ok case.. }
else { .. not ok case ... }

これには、手間をかけずにパスワード ルールを追加、削除、または変更できるという追加の利点があります。一部のリソース ファイルに常駐することもできます。

さらに、読みやすくなっています。

于 2013-10-21T10:45:57.187 に答える
4

これを試してください:

^(?=.*\d{2,})(?=.*[$-/:-?{-~!"^_`\[\]]{1,})(?=.*\w).{8,}$

これがどのように機能するかを簡単に示します。

  • (?=.*\d{2,})少なくとも2桁を除いて言っているこの部分
  • (?=.*[$-/:-?{-~!"^_[]]{1,})` これらは少なくとも 1 つの特殊文字です
  • (?=.*\w)残りは任意の文字 (に等しい[A-Za-z0-9_])
  • .{8,}$これは、以前のすべてのルールを含めて、少なくとも 8 文字を示しています。以下は、現在の正規表現のマップです(Regexperの助けを借りて作成された) 正規表現マップ UPD

正規表現は次のよう^(?=(.*\d){2,})(?=.*[$-\/:-?{-~!"^_'\[\]]{1,})(?=.*\w).{8,}$ になります。詳細については、コメントを確認してください。

于 2013-10-21T10:35:54.993 に答える
3

この正規表現を試してください。先読みを使用して、少なくとも 2 桁の数字と、リストされた特殊文字の 1 つがあることを確認します。

^(?=.*?[0-9].*?[0-9])(?=.*[!@#$%])[0-9a-zA-Z!@#$%0-9]{8,}$ 

説明

^ #Match start of line.

(?=.*?[0-9].*?[0-9]) #Look ahead and see if you can find at least two digits. Expression will fail if not.

(?=.*[!@#$%]) #Look ahead and see if you can find at least one of the character in bracket []. Expression will fail if not.

[0-9a-zA-Z!@#$%0-9]{8,} #Match at least 8 of the characters inside bracket [] to be successful.

$ # Match end of line. 
于 2013-10-21T10:28:08.503 に答える
-1

これを試して :^.*(?=.{8,15})(?=.*\d)(?=.*\d)[a-zA-Z0-9!@#$%]+$

パスワードの正規表現ポリシーを作成するには、以下のリンクをお読みください:-

パスワード規則の正規表現

于 2013-10-21T10:33:08.757 に答える