判断输入的密码必须有8-30位,必须由字母,数字,和 !, @, #, $, %, ^, &, *, ~等特殊符号组成,而且密码字符串里不能出现我用户名的字符串!
我是这样写的:String regEx = "^(([a-zA-Z])|([0-9])|([!@#$%^&*~])){8,30}$";
但是不能够满足要求!希望高人指点!
我是这样写的:String regEx = "^(([a-zA-Z])|([0-9])|([!@#$%^&*~])){8,30}$";
但是不能够满足要求!希望高人指点!
為什么用|??這是或得意思。。
你直接(\d[a-z][A-Z][特殊字符]){8,30}不可以嗎?當然有些特殊字符要轉義,前面+個斜杠如上面的*和^
不能出現用戶名的字符串到最好辦,比好符合要求以后再compare下就可以了
String regEx = "([0-9][a-z][A-Z][!@#$%&~]){8,30}";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(pass);
return m.matches();
}
public static void main(String[] args) {
boolean b = checkPass("ertre%45sdf");
System.out.println(b);
}按你的方法不行,这样还是返回false,boolean b = checkPass("ertre%45sdf")应该返回true的
還有你那個下劃線什么意思啊?
^((\d[a-z][A-Z][特殊字符]){8,30})$
試試看
boolean b = checkPass("hkhkuuyYRGih46!%h");
System.out.println(b);
}返回false!
这个也不行!
System.out.println(m1.matches());以上不能满足匹配不能含有名字的要求,
只能分开使用
password.indexOf(username)==-1
来判断!
String[] str = {
"hkhkuuyYRGi3Hello46!%h$@4545^",
"ertre%45sdf@#$%^&*~",
"@#$%^&*"
};
for(String s : str) {
System.out.println(checkPass(s, "Hello"));
}
} private static boolean checkPass(String password) {
return checkPass(password, null);
}
private static boolean checkPass(String password, String username) {
String namePattern = "";
String pattern = "[A-Za-z0-9!@#$%^&*~]{8,30}";
if(username != null) {
namePattern = "(?!.*?" + Pattern.quote(username) + ".*?)";
return password.matches(namePattern + pattern);
}
return password.matches(pattern);
}
}
String namePattern = "";
String pattern = "[A-Za-z0-9!@#$%^&*~]{8,30}";
if(username == null || "".equals(username)) {
return password.matches(pattern);
}
namePattern = "(?!.*?" + Pattern.quote(username) + ".*?)";
return password.matches(namePattern + pattern);
}