我的密码条件是,最少8个字符,最少一个特殊字符,最少一个数字
为此我写了一个简单的类来验证,但最终失败了。
非常感谢任何帮助。
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();
}
}
}
答案 0 :(得分: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();
}
}
正则表达式指定:
答案 1 :(得分:2)
我不打算尝试编写正则表达式。是。这包括你所有的条件,没有什么比这更难写,更难理解,也可能不是非常有效。只需明确编码您的要求:
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;
}
答案 2 :(得分:0)
如果是字符类,则中间不能有]
或-
,因为它们对字符类语法有意义。如果你想要它们,那么它们必须是班级中的前两个元素,-
之前的]
。