[英]Java String.matches() regular expressions
我正在尝试使用matches()函数检查某些情况下用户输入的密码
“包含六个字母数字字符,至少一个字母和一个数字”
这是我目前检查字母数字字符的条件
pword.matches("([[a-zA-Z]&&0-9])*")
不幸的是,在使用“ rrrrZZ1”作为密码的示例中,此条件仍然返回false
正确的正则表达式是什么? 谢谢
这里的其他人可能证明我错了,但是如果没有一个过于复杂的正则表达式,这将很难做到。 我将只使用非正则表达式方法。 为每个条件设置3个布尔值,遍历字符并在满足每个条件时设置每个布尔值,如果所有3个布尔值都不等于true,则验证失败。
您可以使用以下简单的方法:
public boolean validatePassword(String password){
if(password.length() < 6){
return false;
}
boolean foundLetter = false;
boolean foundNumber = false;
for(int i=0; i < password.length(); i++){
char c = password.charAt(i);
if(Character.isLetter(c)){
foundLetter = true;
}else if(Character.isDigit(c)){
foundNumber = true;
}else{
// Isn't alpha-numeric.
return false;
}
}
return foundLetter && foundNumber;
}
我同意ziesemer-使用validatePassword()方法而不是将其塞入正则表达式中。
对于开发人员而言,更具可读性。
如果您确实想沿着正则表达式路径前进,则可以使用零宽度正向超前行来实现。
包含六个字符,至少一个字母和一个数字:
^.*(?=.{6,})(?=.*[a-zA-Z]).*$
我将您的六个alphanumeric characters
更改为仅characters
。 支持更复杂的密码:)
关于该主题的好文章:
http://www.zorched.net/2009/05/08/password-strength-validation-with-regular-expressions/
也将此书签添加为书签:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.