这是第一次使用正则表达式来实现输入框限制输入类型,场景是项目中个人信息模块中的姓名字段只能要求输入这些类型,之前只是用其他的方式实现过其他类型的限制输入,这次想到这个方法边让同事帮忙写了个正则(对于正则我可真是心有余而力不足)希望能够帮到大家。。。好了不在这里扯牛宝宝了,还是直接上代码吧,对于做技术的而言还是代码来的最实在。。(说好的不扯呢,又扯这么多怪我咯)。
首先上一个正则:
public static String stringFilter(String str) throws PatternSyntaxException { // 只允许字母、和空格和汉字 String regEx = "[a-zA-Z\\u4E00-\\u9FA5 ]+"; return str != null ? (str.matches(regEx) ? str : "") : ""; }
然后实现EditText的addTextChangedListener,并且在onTextChanged调用改正则表达式
nameEt.addTextChangedListener(new TextWatcher() { String str; @Override public void onTextChanged(CharSequence s, int start, int before, int count) {
// String str = stringFilter(nameEt.getText().toString()); //System.out.println("输入框改变的值是:===" + str.toString()); // if (nameEt.getText().equals(str)) { // nameEt.setText(str); //nameEt.setSelection(str.length()); // }
// 注意这里一定是这种形式,上边注释掉的这种形式好像没有作用哎(至于为什么我也不太清楚)
String strs=nameEt.getText().toString(); str = stringFilter(strs.toString()); if (!strs.equals(str)) { nameEt.setText(str); nameEt.setSelection(str.length()); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } });
另外一个正则表达式:^[\u4E00-\u9FA50-9a-zA-Z_-]{0,}$(数字英文字母和中文汉字)
好了,今天就先分享这么多了,希望可以帮助到大家。。。
