最近在为一个项目做维护,遇到了一个有强迫症的测试,给她写了个大写服字,结果为了这个bug特意写了一个类来处理,言归正传吧,看看代码是怎样处理的
只能输入中文的正则 使用方式最后贴上整个类的代码给大家
importandroid.text.Editable;
importandroid.text.TextWatcher;
importandroid.widget.EditText;
/**
*对EditText输入规则进行校验,规则可以自己定义
*/
publicclassLimitInputTextWatcherimplementsTextWatcher {
/**
* et
*/
privateEditText et =null;
/**
*筛选条件
*/
privateString regex;
/**
*默认的筛选条件(正则:只能输入中文)
*/
//private String DEFAULT_REGEX = "[^\u4E00-\u9FA5]";
/**
*默认的筛选条件(正则:只能输入中文和字母)
*/
privateString DEFAULT_REGEX ="[^A-Z|a-z|\u4e00-\u9fa5]";
/**
*构造方法
*
* @param et
*/
publicLimitInputTextWatcher(EditText et) {
this.et = et;
this.regex = DEFAULT_REGEX;
}
/**
*构造方法
*
* @param etet
* @param regex筛选条件
*/
publicLimitInputTextWatcher(EditText et, String regex) {
this.et = et;
this.regex = regex;
}
@Override
publicvoidbeforeTextChanged(CharSequence charSequence,inti,inti1,inti2) {
}
@Override
publicvoidonTextChanged(CharSequence charSequence,inti,inti1,inti2) {
}
@Override
publicvoidafterTextChanged(Editable editable) {
String str = editable.toString();
String inputStr = clearLimitStr(regex, str);
et.removeTextChangedListener(this);
// et.setText方法可能会引起键盘变化,所以用editable.replace来显示内容
editable.replace(0, editable.length(), inputStr.trim());
et.addTextChangedListener(this);
}
/**
*清除不符合条件的内容
*
* @param regex
* @return
*/
privateString clearLimitStr(String regex, String str) {
returnstr.replaceAll(regex,"");
}
}
网友评论