检查文本的大写,小写,长度和符号是否更改

时间:2018-11-27 09:12:33

标签: android regex android-layout android-edittext

我有四个checkboxes,如果条件满足edit text的文本更改,将对其进行检查。一个复选框表示大写,一个表示长度,一个表示小写,另一个表示符号。 一旦用户开始输入以下一项或全部或所有可能的一项,就需要检查。

我尝试过:

 mBinding.cetPassword.getEditText().addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {


                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {

                    if (validateUpperCase(mBinding.cetPassword.getEditText().getText().toString().trim())) {
                        mBinding.chkUpperCase.setChecked(true);
                    }else {
                        mBinding.chkUpperCase.setChecked(false);
                    }

                }

                @Override
                public void afterTextChanged(Editable s) {

                }
            });

  public boolean validateUpperCase(String name) {
        Pattern ps = Pattern.compile("([A-Z]*)");
        Matcher ms = ps.matcher(name);
        return ms.matches();
    }

它并不完美。添加第二个大写字母复选框时未选中。

请提出建议!谢谢!

3 个答案:

答案 0 :(得分:3)

不要使用if-else,就像下面这样,

 if (validateUpperCase(mBinding.cetPassword.getEditText().getText().toString().trim())) 
      {    
          mBinding.chkUpperCase.setChecked(true);
      }
if (condition)   {
      mBinding.chkUpperCase.setChecked(false);
         }

答案 1 :(得分:2)

您可以使用以下方法检查密码:

iOS

然后addTextChangedListener将像这样:

private static boolean hasLength(CharSequence data) {
return String.valueOf(data).length() >= 8;
}

private static boolean hasSymbol(CharSequence data) {
String password = String.valueOf(data);
return !password.matches("[A-Za-z0-9 ]*");
}

private static boolean hasUpperCase(CharSequence data) {
String password = String.valueOf(data);
return !password.equals(password.toLowerCase());
}

private static boolean hasLowerCase(CharSequence data) {
String password = String.valueOf(data);
return !password.equals(password.toUpperCase());
}

答案 2 :(得分:1)

您需要使用正则表达式。 在这里编码:

editText.addTextChangedListener(new TextWatcher() {
  @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {

  }

  @Override public void onTextChanged(CharSequence s, int start, int before, int count) {
    String lowerCase = "(.*[a-z].*)";
    String upperCase = "(.*[A-Z].*)";
    String digit = "(.*\\d.*)";
    String symbol = "(.*[:?!@#$%^&*()].*)";

    if(Pattern.matches(lowerCase,s.toString())){
      chkLowercase.setChecked(true);
    }else{
      chkLowercase.setChecked(false);
    }
    if(Pattern.matches(upperCase,s.toString())){
      chkUppercase.setChecked(true);
    }else{
      chkUppercase.setChecked(false);
    }
    if(Pattern.matches(digit,s.toString())){
      chkDigit.setChecked(true);
    }else{
      chkDigit.setChecked(false);
    }
    if(Pattern.matches(symbol,s.toString())){
      chkSymbol.setChecked(true);
    }else{
      chkSymbol.setChecked(false);
    }
  }

  @Override public void afterTextChanged(Editable s) {

  }
});