1. 程式人生 > >Android過濾emoji表情正則表示式

Android過濾emoji表情正則表示式

做了一些資訊提交的操作,輸入了Emoji表情時,後臺資料庫無法儲存
原因:UTF-8編碼有可能是兩個、三個、四個位元組。Emoji表情是4個位元組,而Mysql的utf8編碼最多3個位元組,所以資料插不進去
討論了一些方案,最後還是前端來做過濾,如果是Emoji表情直接幹掉,因此也找了一些正則表示式,記錄下
只過濾一Emoji表情:
[^\u0000-\uFFFF]
過濾Emoji表情和顏文字:
[\\ud83c\\udc00-\\ud83c\\udfff]|[\\ud83d\\udc00-\\ud83d\\udfff]|[\\u2600-\\u27ff]|[\\ud83e\\udd00-\\ud83e\\uddff]|[\\u2300-\\u23ff]|[\\u2500-\\u25ff]|[\\u2100-\\u21ff]|[\\u0000-\\u00ff]|[\\u2b00-\\u2bff]|[\\u2d06]|[\\u3030]


寫了個靜態方法使用:

/**
     * Emoji表情校驗
     *
     * @param string
     * @return
     */
    public static boolean isEmoji(String string) {
        //過濾Emoji表情
        Pattern p = Pattern.compile("[^\\u0000-\\uFFFF]");
        //過濾Emoji表情和顏文字
        //Pattern p = Pattern.compile("[\\ud83c\\udc00-\\ud83c\\udfff]|[\\ud83d\\udc00-\\ud83d\\udfff]|[\\u2600-\\u27ff]|[\\ud83e\\udd00-\\ud83e\\uddff]|[\\u2300-\\u23ff]|[\\u2500-\\u25ff]|[\\u2100-\\u21ff]|[\\u0000-\\u00ff]|[\\u2b00-\\u2bff]|[\\u2d06]|[\\u3030]");
        Matcher m = p.matcher(string);
        return m.find();
    }