Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.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 如何检查是否至少有:两个字母、一个数字和一个特殊字符?_Java_Regex - Fatal编程技术网

Java 如何检查是否至少有:两个字母、一个数字和一个特殊字符?

Java 如何检查是否至少有:两个字母、一个数字和一个特殊字符?,java,regex,Java,Regex,如何检查java中是否至少有两个字母、一个数字和一个特殊字符?这是我的代码,但我不知道我的方向是否正确 public static boolean validarCodigo(String codigo){ //return Pattern.compile("[abc]").matcher("ba").find(); boolean ContainsAtLeastTwoLetters = Pattern.compile("[0-9]").matcher(codigo).find(

如何检查java中是否至少有两个字母、一个数字和一个特殊字符?这是我的代码,但我不知道我的方向是否正确

public static boolean validarCodigo(String codigo){
    //return Pattern.compile("[abc]").matcher("ba").find();
    boolean ContainsAtLeastTwoLetters = Pattern.compile("[0-9]").matcher(codigo).find();
    boolean tieneAlmenosDosLetras = Pattern.compile("('/[a-zA-   Z]/')").matcher(codigo).find();
    boolean ContainsAtLeastOneSpecialChar; = Pattern.compile ("'/[^a-zA-Z\\d]/'").matcher(codigo).find();       

    return ContainsAtLeastOneDigit && ContainsAtLeastTwoLetters && ContainsAtLeastOneSpecialChar;
公共静态布尔值validarCodigo(字符串codigo){
模式字母=Pattern.compile(“[a-zA-z]”);
Pattern digit=Pattern.compile(“[0-9]”);
//添加或删除您的案例中允许的任何特殊字符
Pattern special=Pattern.compile(“[!@$%&*()”+=“?{}\\[\\]~-]”);
Matcher hasLetter=letter.Matcher(codigo);
Matcher hasDigit=数字匹配器(codigo);
Matcher hasSpecial=special.Matcher(codigo);
返回hasLetter.find()&&hasDigit.find()&&hasSpecial.find();
}
公共静态布尔值validarCodigo(字符串codigo){
模式字母=Pattern.compile(“[a-zA-z]”);
Pattern digit=Pattern.compile(“[0-9]”);
//添加或删除您的案例中允许的任何特殊字符
Pattern special=Pattern.compile(“[!@$%&*()”+=“?{}\\[\\]~-]”);
Matcher hasLetter=letter.Matcher(codigo);
Matcher hasDigit=数字匹配器(codigo);
Matcher hasSpecial=special.Matcher(codigo);
返回hasLetter.find()&&hasDigit.find()&&hasSpecial.find();
}

您的正则表达式似乎有点不正确,但您做得很好。最主要的一点是,您只检查一个数字和字母。要解决此问题,请尝试以下正则表达式:

boolean containsAtLeastTwoLetters = Pattern.compile("[0-9].*[0-9]").matcher(codigo).find();
boolean tieneAlmenosDosLetras = Pattern.compile("[a-zA-Z].*[a-zA-Z").matcher(codigo).find();
boolean containsAtLeastOneSpecialChar = Pattern.compile ("[^a-zA-Z\\d]").matcher(codigo).find();   

我自由地将变量重新格式化为java标准实践(像这样而不是像这样)。

您的正则表达式似乎有点不合适,但您做得很好。最主要的一点是,您只检查一个数字和字母。要解决此问题,请尝试以下正则表达式:

boolean containsAtLeastTwoLetters = Pattern.compile("[0-9].*[0-9]").matcher(codigo).find();
boolean tieneAlmenosDosLetras = Pattern.compile("[a-zA-Z].*[a-zA-Z").matcher(codigo).find();
boolean containsAtLeastOneSpecialChar = Pattern.compile ("[^a-zA-Z\\d]").matcher(codigo).find();   

我自由地将变量重新格式化为java标准实践(像这样而不是像这样)。

您可以使用look aheads在一行中完成:

boolean hasAllThree = codigo.matches("^(?=.*[^a-zA-Z\\d])(?=(.*\\d){2})(?=(.*[a-zA-Z]){2}).*");

您可以使用look aheads在一行中完成此操作:

boolean hasAllThree = codigo.matches("^(?=.*[^a-zA-Z\\d])(?=(.*\\d){2})(?=(.*[a-zA-Z]){2}).*");

根据您的评论,它必须是:

  • 至少一位数字
  • 两封信
  • 还有一个特殊的角色`
因此,您的整个字符串需要完全匹配这些正则表达式中的每一个

  • ^.[0-9].$
  • ^.[a-zA-Z].[a-zA-Z].$
  • ^.[^a-zA-Z\\d].$
这里有一些奇特的方法:) 使用mechanism
(?=…)
可以创建一个正则表达式来检查字符串是否匹配所有这些条件。它可以看起来像:

^(?=.*[0-9])(?=.*[a-zA-Z].*[a-zA-Z])(?=.*[^a-zA-Z\\d]).*$
现在要检查字符串是否与此正则表达式中描述的完全相同,请使用
matches
方法。顺便说一句,该方法还将在regex的开头添加
^
,在结尾添加
$
,这样您就不必编写它们了

您的测试代码可以如下所示

codigo.matches("^(?=.*[0-9])(?=.*[a-zA-Z].*[a-zA-Z])(?=.*[^a-zA-Z\\d]).*$")

根据您的评论,它必须是:

  • 至少一位数字
  • 两封信
  • 还有一个特殊的角色`
因此,您的整个字符串需要完全匹配这些正则表达式中的每一个

  • ^.[0-9].$
  • ^.[a-zA-Z].[a-zA-Z].$
  • ^.[^a-zA-Z\\d].$
这里有一些奇特的方法:) 使用mechanism
(?=…)
可以创建一个正则表达式来检查字符串是否匹配所有这些条件。它可以看起来像:

^(?=.*[0-9])(?=.*[a-zA-Z].*[a-zA-Z])(?=.*[^a-zA-Z\\d]).*$
现在要检查字符串是否与此正则表达式中描述的完全相同,请使用
matches
方法。顺便说一句,该方法还将在regex的开头添加
^
,在结尾添加
$
,这样您就不必编写它们了

您的测试代码可以如下所示

codigo.matches("^(?=.*[0-9])(?=.*[a-zA-Z].*[a-zA-Z])(?=.*[^a-zA-Z\\d]).*$")


不,它必须至少是一个数字,两个字母和一个特殊字符,3个条件必须为真,这样代码才是正确的。SRY如果我没有正确地表达,那是什么?现在你已经给出了三个关于你想要什么的不同故事。在标题中,每个都是一个。代码中有两个字母,两个数字和一个特殊字符,现在你说的是一位数字,两个字母和一个特殊字符?哪一个?欢迎收看StackOverflow。要更新/更正您的问题,您可以使用问题下的[]选项。目前,你的评论与你的标题有所不同,因此最好选择其中哪一条是正确的,并提出质疑。我试图检查它是否至少有:1个字母、1个数字和1个特殊字符。因此,现在你已经反驳了你的第一条评论。是一个字母还是两个字母?(提示:1和2是不同的数字!)不,它必须至少是一个数字、两个字母和一个特殊字符,3个条件必须为真,这样代码才是正确的。SRY如果我没有正确地表达,那是什么?现在你已经给出了三个关于你想要什么的不同故事。在标题中,每个都是一个。代码中有两个字母,两个数字和一个特殊字符,现在你说的是一位数字,两个字母和一个特殊字符?哪一个?欢迎收看StackOverflow。要更新/更正您的问题,您可以使用问题下的[]选项。目前,你的评论与你的标题有所不同,因此最好选择其中哪一条是正确的,并提出质疑。我试图检查它是否至少有:1个字母、1个数字和1个特殊字符。因此,现在你已经反驳了你的第一条评论。是一个字母还是两个字母?(提示:一和二是不同的数字!)谢谢,但它必须至少是一个数字,至少是两个字母,至少是一个特殊的数字,即-@Agustin
^.[0-9].$
将至少与一个数字匹配,
^.[a-zA-Z].[a-zA-Z].$
将至少与两个字母匹配,
.[^a-zA-Z\\d].*$
将至少使用一个特殊字符匹配字符串。对不起,我的错,我没有误解你在乞讨会上说的话,如果特殊字符必须是“-”,我可以用(“[-]”)吗@Agustin是的,最好将其放在literal
-
中,周围没有
[]
(在这种情况下,除非您希望包含其他字符)