Android EditText 特殊字符过滤和字符输入长度限制

时间:2022-12-19 17:09:26

        在之前的android开发中,碰到需要限制EditText中特殊字符的输入和字符长度限制并提示问题。同样这些开发并不难,很快完成了,不过后来给我起了一个Bug“当第一次输入长度达到上限100时给出了提示,达到上限后再次输入没能再次给出提示”。为了解决这个问题,这里经过实践总结,给出一个方案:


                    mEditText.addTextChangedListener(new TextWatcher() {


                        @Override
                        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                            // TODO Auto-generated method stub
                            String editable = mEditText.getText().toString();
                            String str = stringFilter(editable);
                            //过滤输入无效字符并提示
                            if (!editable.equals(str)) {
                                Toast.makeText(this, R.string.invalid_character,
                                        Toast.LENGTH_LONG).show();
                                mEditText.setText(str);
                            }
                        }


                        @Override
                        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                            // TODO Auto-generated method stub


                        }


                        @Override
                        public void afterTextChanged(Editable editable) {
                            //設置最大輸入長度100,並提示達到輸入上限
                            if (editable.toString().length() > 100) {
                                Toast.makeText(this,R.string.max_character,
                                        Toast.LENGTH_SHORT).show();
                                //删除超出100长度部分的字符
                                editable.delete(mEditText.getSelectionStart() - 1,
                                        mEditText.getSelectionEnd());
                            }
                        }
                    });
            
                    // 设置过滤字符函数(过滤掉我们不需要的字符)
                    public static String stringFilter(String str) throws PatternSyntaxException {
                        //定义一个无效字符的正则表达式
                        String regEx = "[/\\:*?<>|\"]";
                        //生成Pattern对象并且编译一个正则表达式regEx 
                        Pattern p = Pattern.compile(regEx);
                        //用Pattern类的matcher()方法生成一个Matcher对象 
                        Matcher m = p.matcher(str);
                        //如果输入为无效字符则替代为""
                        return m.replaceAll("");
                    }

这里的解决办法是当输入长度超过100时便会给出提示,并删除超出部分,这样效果来看EditText的最大长度还是100,并且子后再次输入都会给出提示达到上限。