如何使用Java中的正则表达式验证字符串,该正则表达式将包含24个字母数字字符,其中至少有8个字母,最后5个是数字
我需要验证一个字符串,它将有24个字母数字字符,至少8个字母,最后5个将是数字。它的正则表达式是什么。我对regex不熟悉。我使用的是如何使用Java中的正则表达式验证字符串,该正则表达式将包含24个字母数字字符,其中至少有8个字母,最后5个是数字,java,regex,Java,Regex,我需要验证一个字符串,它将有24个字母数字字符,至少8个字母,最后5个将是数字。它的正则表达式是什么。我对regex不熟悉。我使用的是[0-9a-zA-Z]{1,9},但它不检查总长度,也不确保最后5个是数字,至少有8个字母。您可以使用这种方式,它可以包含一些正则表达式: if (str.replaceAll("[^a-zA-Z]", "").length() >= 8 && str.matches(".*\\d{5}")) { System.out.println
[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");
}
注意 与注释中提到的一样,如果要检查非连续数字,可以使用
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");
}
问:正则表达式一定是最好的方法吗?请给我们举个例子好吗?例如1B4YEM9P4KP186543(无效),1FA-CP45E-X-LF192944(有效),我不确定正则表达式是否是最好的方法。您可以提出您认为最好的建议。总共应该是24个字母数字字符,但是
1FA-CP45E-X-LF192944
不包含24个字母数字字符。您是如何解释的?对不起,我不明白@FedericoPiazzaI在使用正则表达式,但“非连续”要求会影响我的正则表达式。我添加它只是作为一个注释:^(?=[\w-]{24})(?=.[a-z]{8,}.*)(?=.*\d{5,}...)。{24}$
。顺便说一句,你有我的VoteTank you@FedericoPiazza,关于degits很明显,OP说最少8个字母,最后5个是数字,最后5个,所以我认为这意味着它应该以5个degits结尾,我错了?