1. 程式人生 > >Android中EditText禁止輸入表情

Android中EditText禁止輸入表情

最近在做的專案中使用者編輯資料的時候不希望使用者輸入表情,如果使用者輸入表情的話上傳給後臺要報錯,所以需要我們前端做一個判斷。下面就來說一下怎麼在EditText中遮蔽表情吧。

  • 網上有很多這樣的列子但是一不小心就會掉進坑裡面,比如繼承EditText,重寫addTextChangedListener()方法。可能當時你測試的時候沒有什麼問題,但是專案上線後就會有很多問題,錯誤率很高,但是檢視友盟後臺的時候好像是擷取字串長度方面的錯誤。所以建議大家不要使用那個方法了。
  • 因為上面的方法不行,肯定要想其他的解決方案了。這裡想到了通過過濾器來攔截使用者輸入的字元,可以避免擷取字串角標越界的問題。
InputFilter inputFilter= new InputFilter() {
        Pattern emoji = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]",
                Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE);

        @Override
        public CharSequence filter(CharSequence source, int
start, int end, Spanned dest, int dstart, int dend) { Matcher emojiMatcher = emoji.matcher(source); if (emojiMatcher.find()) { // Toast.makeText(MainActivity.this,"不支援輸入表情", 0).show(); MyToast.showText("不支援輸入表情"); return
""; } return null; } };

然後給editText設定filter,這裡給editText設定了兩個filter第一個是遮蔽表情,第二個是設定使用者輸入多少字數的限制

//給editText設定filter
edit_name.setFilters(new InputFilter[]{inputFilter,new InputFilter.LengthFilter(12)});
  • 當然這裡最後要提醒大家一點就是,這樣遮蔽的表情符號肯定還是不能夠百分之百的遮蔽完全的。所以最後我們只能選擇讓使用者填寫英文,漢字,和數字了。下面是過濾的程式碼
InputFilter inputFilter=new InputFilter() {

        Pattern pattern = Pattern.compile("[^a-zA-Z0-9\\u4E00-\\u9FA5_]");
        @Override
        public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
         Matcher matcher=  pattern.matcher(charSequence);
            if(!matcher.find()){
                return null;
            }else{
                MyToast.showText("只能輸入漢字,英文,數字");
                return "";
            }

        }
    };

ok,就是這麼簡單。如果我的文章對您有用,請頂一下,謝謝。大家可以加一下Android技術開發群,大家一起學習,成長667941932。