美文网首页
Android EditText使用正则方式屏蔽表情方法完善解决

Android EditText使用正则方式屏蔽表情方法完善解决

作者: yuezhusust | 来源:发表于2018-05-15 20:57 被阅读0次

    1. 现在网上搜一大堆使用正则匹配屏蔽表情输入的方式,代码无外乎就是下面这种:

    InputFilter emojiFilter = 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();

    return "";

    }

    return null;

    }

    };

    这种方法只能屏蔽日常的表情,如果表情比较新颖则无法屏蔽,我这边通过获取无法屏蔽表情的Unicode编码值,完美的解决了比较新颖的表情不能屏蔽的问题,代码如下:

    InputFilter emojiFilter = new InputFilter() {

    Pattern emoji = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\\ud83e\\udc00-\\ud83e\\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();

    return "";

    }

    return null;

    }

    };

    重点就是加入了[\\ud83e\\udc00-\\ud83e\\udfff]正则表达式,这个Unicode字符范围内都是比较新颖的表情的值区间。就是这么简单。

    相关文章

      网友评论

          本文标题:Android EditText使用正则方式屏蔽表情方法完善解决

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