我的match()代码不起作用。为什么不起作用?

时间:2015-11-05 00:23:37

标签: java string

我正在尝试创建一个小程序来读取密码并确定它是否是您可以使用的密码。我使用match()来查看它是否至少有一个字母(大写或小写)和一个数字以及6个字符长。我尝试使用这样的匹配:

if ( passwordLength >= 6 
   && password.matches("[A-Za-z]") 
   && password.matches("\\d")
) {
    System.out.println("Valid Password.");
} 
else {
    System.out.println("Invalid Password.");
}

我不确定我做错了什么。请帮忙。

3 个答案:

答案 0 :(得分:1)

matches函数应该尝试使用我们给出的正则表达式来匹配整个字符串。因此,您可以使用具有复杂正则表达式的单个函数来代替使用两个或多个匹配函数进行条件检查。此外,您的密码似乎不仅包含数字或字母,还包含其他一些字符。

string.matches("^(?=.*[a-zA-Z])(?=.*\\d).{6,}$");
  • (?=.*[a-zA-Z])确定要匹配的字符串必须至少包含一个字母的正向前瞻。

  • (?=.*\\d)断言它必须包含至少一位数字。

  • .{6,}确保长度必须至少为6,最重要的是..

如果长度恰好为6,则将上面的.{6,}更改为.{6}

DEMO

答案 1 :(得分:0)

您的代码存在一些问题:

  • 你的正则表达式错了。您只匹配1个字符,因此您应该将[a-z]更改为[a-z] +。
  • 你匹配'它应该大于6,应该是一个字符,它应该是一个数字。这与你的要求不同。

答案 2 :(得分:0)

看起来你错误地解释了匹配函数,匹配整个输入,而你期望它在子字符串匹配时返回true。正如其他人所建议的那样,你需要使用单个正则表达式和match()调用,因为你要问的是字符串是单个字符还是数字(永远不会是真的)。​​

另一个重点是,尽管对您来说可能并不重要,但密码永远不应该存储为String对象,因为它们是不可变的,并且可以持续足够长的时间以便其他东西出现并读取它。更多关于here