>我需要验证一个字符串,该字符串总共有 24 个字母数字字符,至少 8 个字母,最后 5 个是数字。它的正则表达式是什么。我是正则表达式的新手。我正在使用这个[0-9a-zA-Z]{1,9}
,但它不检查总长度,也不确保最后 5 个是数字和最少 8 个字母。
您可以使用这种可以包含一些正则表达式的方式:
if (str.replaceAll("[^a-zA-Z]", "").length() >= 8 && str.matches(".*\d{5}")) {
System.out.println("Valide");
} else {
System.out.println("Not valid");
}
str.replaceAll("[^a-zA-Z]", "").length() >= 8
替换所有非字母,然后计算其余字母,如果其余字母等于或大于,则为 8 则更正str.matches(".*\d{5}")
的意思是字符串是否应该以 5 度结尾
因此,对于您在评论中提供的输入:
1B4YEM9P4KP186543 return "Not valid"
1FA-CP45E-X-LF192944 return "Valid"
注意
我需要验证一个字符串,该字符串总共有 24 个字母数字 字符
要解决此问题,您可以添加另一个条件str.length() == 24
因此您的条件应如下所示:
if (str.length() == 24
&& str.replaceAll("[^a-zA-Z]", "").length() >= 8
&& str.matches(".*\d{5}")
) {
System.out.println("Valide");
} else {
System.out.println("Not valid");
}
注意
就像@FedericoPiazza评论中提到的,如果你想检查不连续的数字,你可以使用str.replaceAll("[^0-9]", "").lenght() >= 5
而不是str.matches(".*\d{5}")
所以你的条件应该是:
if (str.length() == 24
&& str.replaceAll("[^a-zA-Z]", "").length() >= 8
&& str.replaceAll("[^0-9]", "").lenght() >= 5) {
System.out.println("Valide");
} else {
System.out.println("Not valid");
}