2

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;
4

4 回答 4

2

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

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 标准实践(likeThis 而不是 LikeThis)。

于 2013-05-19T00:56:51.813 回答
1
public static boolean validarCodigo(String codigo){

   Pattern letter = Pattern.compile("[a-zA-z]");  
   Pattern digit = Pattern.compile("[0-9]");  
   // add or remove whatever special characters are permissible in your case
   Pattern special = Pattern.compile ("[!@#$%&*()_+=|<>?{}\\[\\]~-]"); 

   Matcher hasLetter = letter.matcher(codigo);  
   Matcher hasDigit = digit.matcher(codigo);  
   Matcher hasSpecial = special.matcher(codigo);

   return hasLetter.find() && hasDigit.find() && hasSpecial.find();

}
于 2013-05-19T00:51:50.673 回答
1

您可以在一行中使用前瞻来完成:

boolean hasAllThree = codigo.matches("^(?=.*[^a-zA-Z\\d])(?=(.*\\d){2})(?=(.*[a-zA-Z]){2}).*");
于 2013-05-19T01:06:48.387 回答
0

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

  • 至少一位数,
  • 两个字母
  • 和一个特殊字符`

所以你的整个字符串需要完全匹配每个正则表达式

  • ^.*[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现在检查您的字符串是否与此正则表达式使用方法中描述的完全相同。BTW 方法还将在您的正则表达式^的开头和$结尾添加,因此您不必编写它们。

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

codigo.matches("^(?=.*[0-9])(?=.*[a-zA-Z].*[a-zA-Z])(?=.*[^a-zA-Z\\d]).*$")
于 2013-05-19T01:22:36.700 回答