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

时间:2013-05-19 00:44:27

标签: 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();
    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 个答案:

答案 0 :(得分: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)。

答案 1 :(得分: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();

}

答案 2 :(得分:1)

您可以使用预测在一行中执行此操作:

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

答案 3 :(得分:0)

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

  • 至少一位数,
  • 两个字母
  • 和一个特殊的角色`

所以你的整个String需要完全匹配这些正则表达式

  • ^.*[0-9].*$
  • ^.*[a-zA-Z].*[a-zA-Z].*$
  • ^.*[^a-zA-Z\\d].*$

这是一种奇特的方式:)

使用look-ahead机制(?=...),您可以创建一个正则表达式来检查您的字符串是否符合所有这些条件。它看起来像:

^(?=.*[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]).*$")