Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java中的正则表达式验证字符串,该正则表达式将包含24个字母数字字符,其中至少有8个字母,最后5个是数字_Java_Regex - Fatal编程技术网

如何使用Java中的正则表达式验证字符串,该正则表达式将包含24个字母数字字符,其中至少有8个字母,最后5个是数字

如何使用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

我需要验证一个字符串,它将有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("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结尾,我错了?