美文网首页
EditText 对emoji表情过滤

EditText 对emoji表情过滤

作者: 我弟是个程序员 | 来源:发表于2017-09-14 15:57 被阅读0次

    有些奇葩公司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表情过滤

          本文链接:https://www.haomeiwen.com/subject/cjudsxtx.html