Проверьте верхний регистр, нижний регистр, длину и символы в тексте изменить текст редактирования - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть четыре 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 голосов
/ 27 ноября 2018

вы можете проверить пароль, используя следующие методы:

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());
}

, тогда addTextChangedListener будет выглядеть так:

pass_word.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(pass_word.getText().toString().length() > 0){

                if(hasLength(pass_word.getText().toString())){
                    check_length.setChecked(true);
                }else{
                    check_length.setChecked(false);
                }

                if(hasSymbol(pass_word.getText().toString())){
                    check_symbol.setChecked(true);
                }else{
                    check_symbol.setChecked(false);
                }

                if(hasUpperCase(pass_word.getText().toString())){
                    check_upper.setChecked(true);
                }else{
                    check_upper.setChecked(false);
                }

                if(hasLowerCase(pass_word.getText().toString())){
                    check_lower.setChecked(true);
                }else{
                    check_lower.setChecked(false);
                }
            }else{
                check_lower.setChecked(false);
                check_upper.setChecked(false);
                check_length.setChecked(false);
                check_symbol.setChecked(false);
            }
        }
        @Override
        public void afterTextChanged(Editable s) {

        }
    });
0 голосов
/ 27 ноября 2018

Вам необходимо использовать выражение регулярного выражения.Код здесь:

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) {

  }
});
0 голосов
/ 27 ноября 2018

не используйте if-else, используется только если как показано ниже,

 if (validateUpperCase(mBinding.cetPassword.getEditText().getText().toString().trim())) 
      {    
          mBinding.chkUpperCase.setChecked(true);
      }
if (condition)   {
      mBinding.chkUpperCase.setChecked(false);
         }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...