Regex使用条件语句Java验证密码
我对regex不熟悉 基本上,我需要用Java验证密码,以满足以下要求:Regex使用条件语句Java验证密码,java,regex,Java,Regex,我对regex不熟悉 基本上,我需要用Java验证密码,以满足以下要求: 密码必须至少包含六个字符 密码最多可包含20个字符 要使密码有效,应满足以下4条验证规则中的任意3条: 从A到Z的英文字母的大写字母 小写字母a至z 小数位数(0到9) 非字母数字字符(例如!、$、#、%) 例如: Q145aqa-因为包含大写、小写和数字,所以可以 145AS$-由于包含大写、数字和非字母数字字符,因此可以 145234$-不正常,因为它只包含数字和非字母数字字符,并且缺少另一个验证规则 基本上这是我现在
Q145aqa
-因为包含大写、小写和数字,所以可以145AS$
-由于包含大写、数字和非字母数字字符,因此可以145234$
-不正常,因为它只包含数字和非字母数字字符,并且缺少另一个验证规则^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d]{6,20}$
我不知道如何将非字母数字字符的条件添加到表达式中,以及如何让regex检查是否满足上述4个验证规则中的任何三个,以使密码有效?根据@kevin Esche注释,您可以使用
.length()
字符串方法测试前两个验证
为了使密码有效,您可以使用以下代码中的4条验证规则中的任意3条
public static void main(String[] args) {
// TODO Auto-generated method stub
int count=0;
String password="a34A43";
boolean hasUppercase = !password.equals(password.toLowerCase());
boolean hasLowercase = !password.equals(password.toUpperCase());
if(hasUppercase)
count++;
if(hasLowercase)
count++;
Pattern p1 = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
Matcher m = p1.matcher(password);
if(m.find())
count++;
Pattern p2 = Pattern.compile("\\d+", Pattern.CASE_INSENSITIVE);
Matcher m2 = p2.matcher(password);
if(m2.find())
count++;
if(count>=3)
System.out.println("Valid Password");
else
System.out.println("Invalid Password");
}
根据@kevin Esche注释,您可以使用
.length()
字符串方法简单地测试前两个验证
为了使密码有效,您可以使用以下代码中的4条验证规则中的任意3条
public static void main(String[] args) {
// TODO Auto-generated method stub
int count=0;
String password="a34A43";
boolean hasUppercase = !password.equals(password.toLowerCase());
boolean hasLowercase = !password.equals(password.toUpperCase());
if(hasUppercase)
count++;
if(hasLowercase)
count++;
Pattern p1 = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
Matcher m = p1.matcher(password);
if(m.find())
count++;
Pattern p2 = Pattern.compile("\\d+", Pattern.CASE_INSENSITIVE);
Matcher m2 = p2.matcher(password);
if(m2.find())
count++;
if(count>=3)
System.out.println("Valid Password");
else
System.out.println("Invalid Password");
}
这是一个有效的例子:
private final static String PASSWORD_PATTERN = "^[a-zA-Z0-9\\!\\$\\#\\%]{6,20}$";
这是一个有效的例子:
private final static String PASSWORD_PATTERN = "^[a-zA-Z0-9\\!\\$\\#\\%]{6,20}$";
为此使用1个正则表达式不是一个好主意。使用单独的模式并计算匹配的模式数。前两个模式可以用
String#length
轻松计算,对于其他模式,我将使用@WiktorStribiżew建议。(如果单个正则表达式到那时会变得非常简单,只需检查它是否包含大写字母等即可)@WiktorStribiżew为什么?@WiktorStribiżew我同意你的看法。我刚刚准备了一个例子same@ButaniVijay:如果你这样做了,你可以对评论进行投票,我认为没有必要采取额外的行动:)为此使用1个正则表达式不是一个好主意。使用单独的模式并计算匹配的模式数。前两个模式可以用String#length
轻松计算,对于其他模式,我将使用@WiktorStribiżew建议。(如果单个正则表达式到那时会变得非常简单,只需检查它是否包含大写字母等即可)@WiktorStribiżew为什么?@WiktorStribiżew我同意你的看法。我刚刚准备了一个例子same@ButaniVijay:如果您这样做了,您可以向上投票该评论,我相信不需要执行其他操作:)这不会验证4条验证规则中的3条。重新阅读问题。这不会验证4条验证规则中的3条。重读问题。