gpt4 book ai didi

java - 正则表达式验证至少两个字符类(字母、数字、特殊字符)

转载 作者:行者123 更新时间:2023-12-02 01:31:44 24 4
gpt4 key购买 nike

我想在java中匹配至少两个字符类,以获取仅包含小写字母[a-z]、大写字母[A-Z]、数字[0-9]、特殊字符[!#+,-./:=@] .

我已经到达下面提到的正则表达式,但它不起作用:

((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[\\d]))|((?=.*[A-Z])(?=.*[\\d]))|((?=.*[!#+,.\\=:=@-])(?=.*[\\d]))|((?=.*[!#+,.\\=:=@-])(?=.*[a-z]))|((?=.*[!#+,.\\=:=@-])(?=.*[A-Z]))

示例:

wel123 - valid
123@@! - valid
@@@aaa - valid
!!!BDC - valid
ABC123 - valid
rrirrra - invalid
1234567 - invalid
ABCFESS - invalid
@@@!!!! - invalid

提前致谢。

最佳答案

您的正则表达式中唯一缺少的是添加开始 ^$ 结束 anchor 并正确分组整个正则表达式。我还从您的正则表达式中删除了不必要的分组,您可以使用此正则表达式,

^(?:(?=.*[a-z])(?=.*[A-Z])|(?=.*[a-z])(?=.*[\d])|(?=.*[A-Z])(?=.*[\d])|(?=.*[!#+,.\\=:=@-])(?=.*[\d])|(?=.*[!#+,.\\=:=@-])(?=.*[a-z])|(?=.*[!#+,.\\=:=@-])(?=.*[A-Z])).+$

Regex Demo

虽然这种方法有效,但我建议您编写一段代码来实现此目的,因为这个正则表达式对于一般人来说可能无法维护。

验证字符串的 Java 代码方法而不是纯粹的大正则表达式

以下是使用 Java 代码的方法,您可以将模式的 List 以及要验证的字符串以及匹配所需的最少模式的数字传递给方法。检查此代码,

public static void main(String[] args) {
int minRequiredMatch = 2;
List<String> list = Arrays.asList("wel123","123@@!","@@@aaa","!!!BDC","ABC123","rrirrra","1234567","ABCFESS","@@@!!!!");

list.forEach(x -> {
System.out.println(x + " - " + (validateTwoCharSets(x, minRequiredMatch)?"Valid":"Invalid"));
});
}

public static boolean validateTwoCharSets(String str, int minRequiredMatch) {
List<Pattern> patList = new ArrayList<>();
patList.add(Pattern.compile("[a-z]"));
patList.add(Pattern.compile("[A-Z]"));
patList.add(Pattern.compile("[0-9]"));
patList.add(Pattern.compile("[!#+,-./:=@]"));

return validateTwoCharSets(patList, str, minRequiredMatch);
}

public static boolean validateTwoCharSets(List<Pattern> patList, String str, int minRequiredMatch) {
if (minRequiredMatch <0 || minRequiredMatch > patList.size()) {
throw new RuntimeException("minRequiredMatch must be a positive number and not more than pattern list size.");
}
int matchCount = 0;

for (Pattern p : patList) {
Matcher m = p.matcher(str);
if (m.find()) {
matchCount++;
}
if (matchCount >= minRequiredMatch) {
return true;
}
}

return false;
}

对于您给定的数据集打印以下内容,

wel123 - Valid
123@@! - Valid
@@@aaa - Valid
!!!BDC - Valid
ABC123 - Valid
rrirrra - Invalid
1234567 - Invalid
ABCFESS - Invalid
@@@!!!! - Invalid

关于java - 正则表达式验证至少两个字符类(字母、数字、特殊字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55946610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com