1

Javaを使用してパスワード文字列を確認する必要があります。これは検証の要件です。

  • 少なくとも1つの番号
  • 少なくとも1つの英字
  • セットから少なくとも1文字!@#$%^&*()_ + =-〜 `] [{};':"/。>?, <
  • 8〜20文字

何度か壁に頭をぶつけてねじ込んだ後、この正規表現を思いついた

if (!password.matches("^(?=.+[0-9])(?=.+[a-zA-Z])(?=.+[\\x21-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E])[0-9a-zA-Z\\x21-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E]{8,20}$")) {

}

これはひどくて狂気に見えます。この使命を達成するためのより良い方法はありますか?

4

3 に答える 3

3

正規表現を使用することをお勧めしますが、正規表現がうまく機能しない場合はコードを使用します。このようなもの。(申し訳ありませんが、このコードはテストしていませんが、間違えて実行されない場合でも、アイデアが得られるはずです。)

Pattern special_chars = Pattern.compile("[!@#$%^&*()_+=-~`\][{};':\"/.>?,<]");
Pattern number_chars = Pattern.compile("[0-9]");
Pattern letter_chars = Pattern.compile("[a-zA-Z]");

boolean valid;

valid = (special_chars.matcher(password).find() &&
        number_chars.matcher(password).find() &&
        letter_chars.matcher(password).find() &&
        8 <= password.length() && password.length() <= 20);
于 2012-12-17T03:28:28.800 に答える
1

グアバ付きCharMatcher

// at least 1 number
CharMatcher.inRange('0', '9').countIn(password) >= 1 && 
// at least 1 alphabet character
CharMatcher.inRange('a', 'z').or(inRange('A', 'Z')).countIn(password) >= 1 && 
// at least 1 character from set !@#$%^&*()_+=-~`][{};':"/.>?,<
CharMatcher.anyOf("!@#$%^&*()_+=-~`][{};':\"/.>?,<").countIn(password) >= 1 && 
// 8 to 20 characters
password.length() >= 8 && password.length() <= 20

これは、ラテンアルファベットが必要であることを前提としています

于 2012-12-17T03:38:50.443 に答える
0

私はこれがすでに答えられていると信じています。

パスワード検証のための正規表現

しかし、検証をそれぞれのカテゴリに分割することをお勧めしますか?このようにすると、より簡単になり、不足しているものをユーザーに正確に伝えることができます。

于 2012-12-17T03:28:05.397 に答える