android正则表达式,包含至少3种类型的字符

时间:2016-12-01 16:15:21

标签: java android regex

我想在Android上使用一个正则表达式,其中至少包含3种类型的字符:

Number, upper letter, lower letter and special characters,

我找到了这个正则表达式

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,100}

但是这会告诉最小8和最大,10个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符。 但我需要这4种类型的3种类型,而不是所有4种类型。

例如,此密码有效:

Test1987(因为它包含3个类型=上部字符,下部和数字) & est7sss(也有效,它包含特殊字符,数字和较低字符)

密码无效:

test1987(仅包含两种类型的低位和数字)

我该怎么办呢

----------------- EDIT -------------

我使用了这样的功能,似乎有效

   public boolean validatePassword(final String password){
      Integer numberType = 0;
      if(password.length() > 7){

      if (password.matches(".*\\d.*")) {
          numberType = numberType + 1;
      }
      if (password.matches(".*[a-z].*")) {
          numberType = numberType + 1;
      }
      if (password.matches(".*[A-Z].*")) {
          numberType = numberType + 1;
      }
      if (!password.matches("[A-Za-z0-9 ]*")) {
          numberType = numberType + 1;
      }
      }
      else{
          return false;

      }

      if(numberType>2)
          return true;
      return false;

  }

1 个答案:

答案 0 :(得分:1)

  public boolean validatePassword(final String password){
      Integer numberType = 0;
      if(password.length() > 7){

      if (password.matches(".*\\d.*")) {
          numberType = numberType + 1;
      }
      if (password.matches(".*[a-z].*")) {
          numberType = numberType + 1;
      }
      if (password.matches(".*[A-Z].*")) {
          numberType = numberType + 1;
      }
      if (!password.matches("[A-Za-z0-9 ]*")) {
          numberType = numberType + 1;
      }
      }
      else{
          return false;

      }

      if(numberType>2)
          return true;
      return false;

  }