EditText 对emoji表情过滤

有些奇葩公司sb后台,数据库创建时,并没有兼容输入法的表情,却特么把锅推给前端,让前端不让输入表情,我只想送他三个字MMP!!!SB自有天来收!!!
好吧。。。不吐槽了,其实要是我做后台的话,解决这个问题很简单,只需要将数据库的编码改为utf8mb4就行了。那么现在我只是安卓开发者,我又要怎么处理呢?
可以给EditText设置过滤器,但是,表情过滤并不是完全过滤。这个方法,只能拒绝大多数表情符,并不能拒绝所有的表情符。本人也没有找到一个好的前端的方法,看了好多网上的方法,都是没有过滤干净的。还望大神们见到不吝赐教。

   /** 只允许 英文,汉字,和数字 ,这个过滤器已经很接近了,可以不能输入标点。。fk **/
        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 {
                    Toast.makeText(BookDetailsActivity.this, "不支持输入表情", Toast.LENGTH_SHORT).show();
                    return "";
                }
            }
        };


        /** 表情过滤器 */
        InputFilter emojiFilter = new InputFilter() {
            //[\\uD83C\\uDF00-\\uD83D\\uDDFF]
            //[\\uD83E\\uDD00-\\uD83E\\uDDFF]
           // [\\uD83D\\uDE00-\\uD83D\\uDE4F]
            //[\\uD83D\\uDE80-\\uD83D\\uDEFF]

            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(BookDetailsActivity.this, "不支持输入表情", Toast.LENGTH_SHORT).show();
                    return "";
                }
                return null;
            }
        };

        InputFilter[] emojiFilters = {emojiFilter};
        et_rb_remark_content.setFilters(emojiFilters);

这里有好多Java中Emoji的正则表达式,可能对屏蔽表情有用。。。
还有这里有好多特殊的正则表达式

你可能感兴趣的:(EditText 对emoji表情过滤)