1. 程式人生 > >Android 過濾特殊字元和emoji表情

Android 過濾特殊字元和emoji表情

網上有很多遮蔽特殊字元和表情的例子,用起來也很簡單,比如:

//判斷搜尋框內容是否包含特殊字元
                String limitEx = "[`[email protected]#$%^&*()+=|{}':;',\\[\\].<>/?~!@①#¥%……&*()——+|{}【】‘;:”“’。,、?]";

                Pattern pattern = Pattern.compile(limitEx);
                Matcher m = pattern.matcher(str);

                if (m.find()) {
                    ToastUtil.show("不能輸入特殊字元");
                    return groupList;
                }

一般都是利用正則來判斷,但是特殊字元和表情特別多 要將這些特殊字元都用正則來判斷會顯得多而臃腫。

在Activirty中呼叫:

et.addTextWatcherListener(textWatcher);
           setProhiitEmoji(et);

後來在專案中看到了我們經理寫的頓時覺得高大上啊 

於是趕緊整理下收藏起來方便以後再用,雖然不是很明白原理,但是用起來很方便直接放進專案裡呼叫就可以了
  public  void setProhibitEmoji(EditText et) {
        InputFilter[] filters = { getInputFilterProhibitEmoji() ,getInputFilterProhibitSP()};
        et.setFilters(filters);
    }

    public  InputFilter getInputFilterProhibitEmoji() {
        InputFilter filter = new InputFilter() {
            @Override
            public CharSequence filter(CharSequence source, int start, int end,
                                       Spanned dest, int dstart, int dend) {
                StringBuffer buffer = new StringBuffer();
                for (int i = start; i < end; i++) {
                    char codePoint = source.charAt(i);
                    if (!getIsEmoji(codePoint)) {
                        buffer.append(codePoint);
                    } else {
                        ToastUtil.show("群組暱稱不能含有第三方表情");
                        i++;
                        continue;
                    }
                }
                if (source instanceof Spanned) {
                    SpannableString sp = new SpannableString(buffer);
                    TextUtils.copySpansFrom((Spanned) source, start, end, null,
                            sp, 0);
                    return sp;
                } else {
                    return buffer;
                }
            }
        };
        return filter;
    }


    public  boolean getIsEmoji(char codePoint) {
        if ((codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)
                || (codePoint == 0xD)
                || ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
                || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
                || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)))
            return false;
        return true;
    }


    public  InputFilter getInputFilterProhibitSP() {
        InputFilter filter = new InputFilter() {
            @Override
            public CharSequence filter(CharSequence source, int start, int end,
                                       Spanned dest, int dstart, int dend) {
                StringBuffer buffer = new StringBuffer();
                for (int i = start; i < end; i++) {
                    char codePoint = source.charAt(i);
                    if (!getIsSP(codePoint)) {
                        buffer.append(codePoint);
                    } else {
                        ToastUtil.show("群組暱稱不能含有特殊字元");
                        i++;
                        continue;
                    }
                }
                if (source instanceof Spanned) {
                    SpannableString sp = new SpannableString(buffer);
                    TextUtils.copySpansFrom((Spanned) source, start, end, null,
                            sp, 0);
                    return sp;
                } else {
                    return buffer;
                }
            }
        };
        return filter;
    }
public boolean getIsSp(char codePoint){
if(Characcter.getType(codePoint)>Character.LETTER_NUMBER){

return true;

}

return false;

}


在Anctivity中呼叫:
llLin.setOnClickListener(onClick);
et.addTextChanagedListener(textWatcher);
setProhibitEmoji(et);

相關推薦

Android過濾特殊字元emoji表情

1.需求場景     現在一些輸入法自帶emoji表情,EditText是支援該字元輸入的,而對於業務來說,輸入這些字元又是不合法的,因此需要對這些字元進行過濾,在使用者輸入時即時給出提示資訊。 2.解決方法     為EditText新增輸入過濾器

Android 過濾特殊字元emoji表情

網上有很多遮蔽特殊字元和表情的例子,用起來也很簡單,比如://判斷搜尋框內容是否包含特殊字元 String limitEx = "[`[email protected]#$%^&*()+=|{}':;',\\[\\].<

ser2net過濾特殊字元

許多流行的linux串列埠程式設計的版本中都沒對c_iflag(termios成員變數)這個變數進行有效的設定,這樣傳送ASCII碼時沒什麼問題,但傳送二進位制資料時遇到0x0d,0x11和0x13卻會被丟掉。不用說也知道,這幾個肯定是特殊字元,被用作特殊控制了。關掉ICRNL和IXON

Linux Shell特殊字元控制字元大全

# 註釋 表示註釋 #註釋 在引號中間和\#等表示#本身 echo ${PATH#*:} # 引數替換,不是一個註釋 echo $(( 2#101011 )) # 數制轉換,不是一個註釋 ; 分隔 命令分隔,在一行中寫多個命令 echo "aa" ; echo "bb"

js遮蔽/過濾 特殊字元,輸入就刪除掉,實時刪除

1.替換方法: <input type="text" class="domain" onkeyup="this.value=this.value.replace(/[^\u4e00-\u9fa5\w]/g,'')" ; this.value=this.value.replace(/[^\u4e00-\

php 字串過濾特殊字元

* mb_ord.php <?php class Str { public static function filter(string $s, callable $f=null, string $encoding = 'UTF-8') { $enc = mb_de

jquery過濾特殊字元',防sql注入

出自:  直接上程式碼: <script type="text/javascript" language="javascript"> $(document).ready(function() { //返回 $("#btnBack").click(

處理特殊字元移掉內聯樣式

#region 處理特殊字元 public static string DisposalSpecial(string regexStr) { var regex = new Regex("([\\\\

js解析QQ表情emoji表情

使用的是vue 思路: 前端接受到的訊息(我是json格式),匹配出QQ表情和emoji 匹配的格式見程式碼,需要注意的是emoji要先把資料通過escape轉換成unicode之後再匹配 匹配的結果都是陣列,遍歷陣列,將匹配的內容替換為img,emoji rep

android 字串特殊字元轉義

2. 變數文字格式(%s)提示:  Multiple annotations found at this line:  - error: Multiple substitutions specified in non-positional format; did you mean to add the for

過濾字串中的Emoji表情

    iOS 5.0之前,蘋果都是採用3個位元組來承接 emoji 表情,Java 的普通 char 可以支援顯示。但 iOS 5.0 之後, 蘋果升級了系統自帶的 emoji 表情輸入法,用的 Unicode 6 標

js過濾特殊字元

轉自:http://blog.csdn.net/you23hai45/article/details/21120119 JavaScript過濾特殊字元 1、設計例項 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1

iOS:使用NSRegularExpression正則去掉一串字串中所有的特殊字元標點

/* 遍歷的模式,正則表示式匹配在指定options和range模式下匹配指定string,傳入block中可以獲取結果資訊 */ - (void)enumerateMatchesInString:(NSString *)string options:(NSMatchingOptions)options

php防sql注入過濾特殊字元

我在PHP4環境下寫了一個防SQL注入的程式碼,經過實際使用在PHP5下也相容,歡迎大家使用修改,使用。 程式碼如下: <?php/*sqlin 防注入類*/class sqlin{//dowith_sql($value)function dowith_sql($str){   $str = str_

Java獲取字元的Unicode編碼以及如何過濾特殊字元ZWNJ

獲取Unicode編碼 package com.xs.test; public class Test { public static void main(String[] args) throw

ASP過濾特殊字元

<%Function FormatHTML(fString)     If fString<>""Then         fString =trim(fString)         fString =replace(fString, ";", ";")     '分號過濾        

Java與Mysql開發中的特殊字元(包括Emoji)

背景知識 emoji表情符號,是20世紀90年代由NTT Docomo慄田穣崇(Shigetaka Kurit)建立的,詞義來自日語(えもじ,e-moji,moji在日語中的含義是字元)。emoji可以使數字通訊做到讓人如同面對面交流,避免錯誤傳達資訊。自蘋果公司釋出的i

防止javascript 注入攻擊 js過濾特殊字元

//匹配中文 數字 字母 下劃線       var checkInput = function (str) {     var pattern = /^[\w\u4e00-\u9fa5]+$/gi;   if(pattern.test(c))   {    return false;          

android撥打特殊字元#

Uri uri = Uri.parse("tel:" + "*#*#4636#*#*");//(注:xxxxx為電話號碼) Intent intent= new Intent(Intent.ACTION_DIAL, uri); startActivity(intent

c#正則表示式過濾特殊字元

碰到了一個問題,要過濾字串中的|#|$|^|*|(|)|+|{|?|[|.這種字元。可是這些字元時正則表示式中的特殊字元,怎麼辦呢?有兩種辦法。 主要的思路是把 類似 “*” “[”的Relpace 為“\*”,"\["等 1,直接替換。 splitKey = split