这是一个简单的问题,但是请听我说完-- Java作业的一部分有一个密码验证器方法。要求很简单-密码必须在6-10个字符之间,必须由数字或字母组成,并且必须至少有两个数字才能有效。我使用if语句并使用regex,由于某些原因,我无法使非单词字符regex匹配,尽管每个在线regex检查器都显示这应该有效,甚至jetbrains的regex检查插件也表明这是有效的。(我也知道,这可以用一条线,而不是if语句,但这种方式对我来说更简单。
示例输入- MyPass123应该是有效的,MyPass123#应该匹配非单词字符,并且应该返回“密码必须仅由字母和数字组成”,而这种情况永远不会发生。我是Java的初学者,所以很可能我做得不对,尽管这是一个简单的问题。提前谢谢你!
方法代码如下:
public static void passswordCheck(String password)
{
if(password.length()<6 || password.length()>10)
{
System.out.printf("Password needs to be between 6 and 10 characters");
}
else if(password.matches("\\W")) \\This should match when input is MyPass123#
{
System.out.printf("Password must consist only of letters and digits");
}
else if(!password.matches("/(\\d).*(\\d)/"))
{
System.out.printf("Password needs to have at least 2 digits");
}
else
{
System.out.printf("Password is valid");
}
}发布于 2020-07-30 07:56:54
只有当字符串由非字母数字的单个字符(= [^a-zA-Z0-9_])组成时,才会进行匹配。
如果希望任何至少包含一个非字母数字字符的字符串:.*?\W.*
发布于 2020-07-30 07:51:19
我已经测试了下面的代码。可以使用两个选项,尝试使用Konrad在上面的注释中提到的find方法,或者在regex中处理它,以匹配字符串中任何位置的字符。
\\w{6,10} -只匹配包含单词字符的有效密码(A-Za-Z0-9)
.*?\\d{2,}.*? -查找两个或更多个连续数字
我已将其更改为使用Pattern.matches。
import java.util.regex.*;
public class test {
public static void passswordCheck(String password)
{
if(password.length()<6 || password.length()>10)
{
System.out.println("Password needs to be between 6 and 10 characters");
}
else if(!Pattern.matches("\\w{6,10}",password)) //This should match when input is MyPass123#
{
System.out.println("Password must consist only of letters and digits");
}
else if(!Pattern.matches(".*?\\d{2,}.*?",password))
{
System.out.println("Password needs to have at least 2 digits");
}
else
{
System.out.println("Password is valid");
}
}
public static void main(String[] args)
{
passswordCheck("Mypass2");
}
}发布于 2020-07-30 08:02:51
String#matches总是执行整个匹配,即匹配需要跨越整个字符串,从第一个字符到最后一个字符。要搜索字符串中任何位置的匹配,需要使用Matcher对象的Matcher:
final Pattern nonWordChar = Pattern.compile("\\W");
if (nonWordChar.matcher(password).find()) {
System.out.printf("Password must consist only of letters and digits");
}
…您将需要对其他正则表达式执行同样的操作。
https://stackoverflow.com/questions/63168229
复制相似问题