繁体   English   中英

Java String.matches()正则表达式

[英]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/

也将此书签添加为书签:

http://www.regular-expressions.info/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM