我正在尝试创建一个小程序来读取密码并确定它是否是您可以使用的密码。我使用match()来查看它是否至少有一个字母(大写或小写)和一个数字以及6个字符长。我尝试使用这样的匹配:
if ( passwordLength >= 6
&& password.matches("[A-Za-z]")
&& password.matches("\\d")
) {
System.out.println("Valid Password.");
}
else {
System.out.println("Invalid Password.");
}
我不确定我做错了什么。请帮忙。
答案 0 :(得分:1)
matches
函数应该尝试使用我们给出的正则表达式来匹配整个字符串。因此,您可以使用具有复杂正则表达式的单个函数来代替使用两个或多个匹配函数进行条件检查。此外,您的密码似乎不仅包含数字或字母,还包含其他一些字符。
string.matches("^(?=.*[a-zA-Z])(?=.*\\d).{6,}$");
(?=.*[a-zA-Z])
确定要匹配的字符串必须至少包含一个字母的正向前瞻。
(?=.*\\d)
断言它必须包含至少一位数字。
.{6,}
确保长度必须至少为6,最重要的是..
如果长度恰好为6,则将上面的.{6,}
更改为.{6}
答案 1 :(得分:0)
您的代码存在一些问题:
答案 2 :(得分:0)
看起来你错误地解释了匹配函数,匹配整个输入,而你期望它在子字符串匹配时返回true。正如其他人所建议的那样,你需要使用单个正则表达式和match()调用,因为你要问的是字符串是单个字符还是数字(永远不会是真的)。
另一个重点是,尽管对您来说可能并不重要,但密码永远不应该存储为String对象,因为它们是不可变的,并且可以持续足够长的时间以便其他东西出现并读取它。更多关于here。