我有四个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();
}
它并不完美。添加第二个大写字母复选框时未选中。
请提出建议!谢谢!
答案 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) {
}
});