Java 如何检查是否至少有:两个字母、一个数字和一个特殊字符?
如何检查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(
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].$
(?=…)
可以创建一个正则表达式来检查字符串是否匹配所有这些条件。它可以看起来像:
^(?=.*[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].$
(?=…)
可以创建一个正则表达式来检查字符串是否匹配所有这些条件。它可以看起来像:
^(?=.*[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-
中,周围没有[]
(在这种情况下,除非您希望包含其他字符)