0

パスワードの条件は、8 文字以上、特殊文字 1 文字以上、数字 1 文字以上

このために、検証する単純なクラスを作成しましたが、最終的に失敗します。

どんな助けでも大歓迎です。

public class PasswordVerifier {
    private static final String SPECIAL_CHARACTERS = "(`~!@#$%^&*()_+=-][;'/.,\\<>?|:\"}{)";

    public static void main(String... args) {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        try {
            String password = in.readLine();
            if(!password.matches("^.*(?=.{8,})(?=.*[0-9])(?=.*[SPECIAL_CHARACTERS]).*$")){
                System.out.println("Password does not satisfy compliant");
            } else {
                System.out.println("Yes.. gets through");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
4

3 に答える 3

3

これはあなたの要件のために働くかもしれません:

private static final String SPECIAL_CHARACTERS = "(`~!@#$%^&*()_+=-\\]\\[;'/.,\\<>?|:\"}{)";

public static void main(String[] args) {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    try {
        String password = in.readLine();
        if(!password.matches("((?=.*\\d)(?=.*["+SPECIAL_CHARACTERS+"]).{8,})")){
            System.out.println("Password does not satisfy compliant");
        } else {
            System.out.println("Yes.. gets through");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

正規表現は以下を指定します:

  • 入力には0〜9の1桁が含まれている必要があります
  • 定義したSPECIAL_CHARACTERSのリストに1つの特殊記号が含まれている必要があります
  • 長さは8文字以上である必要があります
于 2012-09-09T06:40:01.040 に答える
2

わざわざ正規表現を書こうとは思いません。すべての条件を含み、他に何もない re は、書くのが難しく、理解するのが難しく、おそらく非常に効率的ではありません。要件を明示的にコーディングするだけです。

boolean isAcceptablePassword(String pwd) {
    boolean numeric = false, special = false;
    if (pwd.length() >= 8) {
        for (int i = pwd.length() - 1; !numeric && !special && i >= 0; --i) {
            char c = pwd.charAt(i);
            numeric = numeric || Character.isDigit();
            special = special || SPECIAL_CHARACTERS.indexOf(c) >= 0;
        }
    }
    return numeric && special;
}
于 2012-09-09T06:54:11.117 に答える
0

文字クラスの構文には意味があるため、文字クラスの場合、]または途中に置くことはできません。-それらをそこに入れたい場合は、クラスの最初の 2 つの要素である必要があり-ます]

于 2012-09-09T06:58:39.943 に答える