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 的一位数字
  • 必须在您定义的 SPECIAL_CHARACTERS 列表中包含一个特殊符号
  • 长度应至少为 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

如果是字符类,则不能有]-在中间,因为它们对字符类语法有意义。如果你想让它们在那里,它们必须是类中的前两个元素,-].

于 2012-09-09T06:58:39.943 回答