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

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字符范围内都是比较新颖的表情的值区间。就是这么简单。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
    oceanfive阅读 3,124评论 0 7
  • 原文地址 之前在http://shukuiyan.iteye.com/blog/507915文中已经叙述过这个问题...
    hmaccelerate阅读 880评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,837评论 18 139
  • 1.正则表达式介绍 正则表达式算起来也是一个很庞大的语言系统,在所有的开发语言中基本都支持正则表达式,它可以很方便...
    babybus_superdo阅读 2,593评论 3 6
  • 忽然间说道这个话题相信很多人都不会陌生,但在我看来这是生活中常见的问题。为什么说生活层次呢?这是因为我们生活中有高...
    莺歌学飞阅读 400评论 0 0