2015-11-05 134 views
0

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

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

林不知道我做错了什么。请帮忙。

回答

1

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

string.matches("^(?=.*[a-zA-Z])(?=.*\\d).{6,}$"); 
    其声称该字符串将被匹配必须至少含有一个一个字母
  • (?=.*[a-zA-Z])正预测先行。

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

  • .{6,}确保了长度至少要包含6和atmost任何..

对于长度为刚好6然后改变在上述.{6,}.{6}

DEMO

+0

这并不能解释初始方法出了什么问题,或者该解决方案如何解决问题 –

+0

@HunterMcMillen它不会解决问题吗? –

+0

我与@HunterMcMillen。虽然这是一个很好的解决方案,但“教人鱼”的思维模式表明,解释为什么原文不起作用会很好。 – blm

0

您的代码有两种错误:

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

对于第二部分,他必须使用包含。由于'\\ d +'检查字符串只包含数字。 –

+0

也许,但检查密码是否只有数字或只有字符有点奇怪,对不对?在这个例子中,可能'^ [a-zA-Z0-9] {6,} $'会更有意义。 –

+0

不,他希望密码包含至少一个数字和至少一个字母。 –

0

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

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

相关问题