((?=.*[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
您的regex中唯一缺少的是添加开始^
和$
结束锚点,并正确地对整个regex进行分组。我还从您的regex中删除了不必要的分组,您可以使用此regex,
^(?:(?=.*[a-z])(?=.*[A-Z])|(?=.*[a-z])(?=.*[\d])|(?=.*[A-Z])(?=.*[\d])|(?=.*[!#+,.\\=:=@-])(?=.*[\d])|(?=.*[!#+,.\\=:=@-])(?=.*[a-z])|(?=.*[!#+,.\\=:=@-])(?=.*[A-Z])).+$
Regex演示
尽管这种方法很有效,但我还是建议您编写一段代码来实现这一点,因为这个regex对一般人来说可能是不可维护的。
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
朋友们,可以在一个正则表达式中验证特殊字符的最小值、大写字母的最小值和数字的最小值吗? 字符串示例: 我想要的是: 我想要一个正则表达式来验证至少2个特殊字符、2个数字和2个大写字母
我需要一个正则表达式,它应该至少有一个数字字符,允许大小写字母,也允许特殊字符 但它对最大字符10无效。
我试图验证一个字符串,它应该只包含字母、数字和特殊字符。为此,我尝试使用正则表达式。 在使用上述代码时,字符串是有效的。但我的要求是出示这个无效。ie每当出现字母、数字或特殊字符以外的字符时,字符串的计算结果应为无效。如何使用regex实现这一点?
我需要密码字段的正则表达式。 要求是: > 密码长度必须为8到20个字符 必须包含至少一个字母和一个数字以及来自
我需要一个正则表达式来检查: 密码至少包含八个字符,其中至少包含一个数字,并且包含大小写字母和特殊字符,例如、、。 它不能是您的旧密码,也不能包含您的用户名、或 这里是我的验证表达式,它针对八个字符,包括一个大写字母,一个小写字母,和一个数字或特殊字符。 密码必须是八个字符,包括一个大写字母,一个特殊字符和字母数字字符,我怎么写呢?
我想使用正则表达式来验证名称。名称必须包含名、中间名、姓氏(不一定全部)。但我还想设置一个条件,即名称必须至少包含四个字符。我在这里找到了用于验证全名的正则表达式Java regex to validate full name…,并在这里找到用于检查字符串中是否至少有三个字符(字母)的正则表达式regex,以检查是否至少有3个字符。但我不确定如何将这两者结合起来以获得期望的结果。请帮助我实现所需的