导语

最近在项目中遇到一个输入法自带emoji表情无法上传的问题,想到采用禁止输入emoji的办法(其实后台数据库添加emoji表情符是更好的做法,当然有些输入框确实不需要emoji表情),搜索了很多文章都没有很完美的过滤方式,最后参考一些文章和emoji编码表实现了一个满足自身需求的。

实现

/**

* 通用表情过滤器

*/

public class FilterEmojiTextWatcher implements TextWatcher {

private Context mContext;

public FilterEmojiTextWatcher(Context mContext){

this.mContext = mContext;

}

@Override

public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {}

@Override

public void onTextChanged(CharSequence charSequence, int start, int before, int count) {

if(count - before >= 1){

CharSequence input = charSequence.subSequence(start + before, start + count);

if(isEmoji(input.toString())){

Toast.makeText(mContext,"不支持emoji表情",Toast.LENGTH_SHORT).show();

((SpannableStringBuilder)charSequence).delete(start + before, start + count);

}

}

}

@Override

public void afterTextChanged(Editable editable) {}

/**

* 正则判断emoji表情

* @param input

* @return

*/

private boolean isEmoji(String input){

Pattern p = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\ud83e\udc00-\ud83e\udfff]" +

"|[\u2100-\u32ff]|[\u0030-\u007f][\u20d0-\u20ff]|[\u0080-\u00ff]");

Matcher m = p.matcher(input);

return m.find();

}

}

代码很简单,只是在文本内容变化的时候判断是否是emoji输入,如果是则删除。重点就是正则表达式如何写,这也是网上的过滤方式都太老了的原因,emoji随时都会增加,所以在客户端写死其实并不是特别好的方式(没办法中的办法)。再解释下onTextChanged方法里面的参数:charSequence是已经改变过的文本内容;start表示操作的位置,也就是光标位置;before代表被替换的就文本长度,其实添加文本的时候这个长度都为0,删除的时候为删除的字符长度;count是替换的文本长度,添加文本的时候长度为添加字符的长度,删除文本时为0。通过这些参数就可以截取到输入的字符,从而用正则表达式判断,如果是就直接删除。而正则表达式的数据是从下面的emoji编码表查看的,里面都是最新的表情。

添加输入框监听器:

// 和正常使用方法一样,不需要的方法不用重写。

noEmojiET.addTextChangedListener(new FilterEmojiTextWatcher(getContext()){

@Override

public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {

super.beforeTextChanged(charSequence, start, count, after);

}

@Override

public void onTextChanged(CharSequence charSequence, int start, int before, int count) {

super.onTextChanged(charSequence, start, before, count);

}

@Override

public void afterTextChanged(Editable editable) {

super.afterTextChanged(editable);

}

});

参考资料

android edittext过滤表情,EditText过滤emoji表情相关推荐

  1. emoji昵称php,php过滤微信用户昵称emoji表情方法汇总 - 旗云号

    php过滤微信用户昵称emoji表情方法汇总 微信用户昵称带emoji表情的话,保存数据库会报错,解决办法有两种:一.修改数据库表和字段的字符集为utf8mb4:二.过滤emoji表情字符:根据自己的 ...

  2. python过滤文本中的emoji表情

    python过滤文本中的emoji表情 最近在处理文本内容的时候发现很多文本会有特色表情,由于占位较多,想着能过滤掉就好,也不影响文本内容含义,并且对后续做语义分析也有帮助. 网上搜了下,总体还是通过 ...

  3. android 过滤emoji表情符号,android怎样过滤字符串中的emoji表情

    满意答案 jdubysct 2016.03.15 采纳率:43%    等级:8 已帮助:863人 解决方案 对于字符串处理,首选就是正则表达式去处理,而在android系统中可以自定义InputFi ...

  4. mysql 过滤emoji表情_MySQL中emoji表情过滤

    问题描述 最近在对线上排错过程中发现很多入库时产生的错误日志,表现形态如下 Incorrectstringvalue:'\xF0\x9F\x91\x8D\xE6\x94...'forcolumn'co ...

  5. 过滤字符串中的Emoji表情

    iOS 5.0之前,苹果都是采用3个字节来承接 emoji 表情,Java 的普通 char 可以支持显示.但 iOS 5.0 之后, 苹果升级了系统自带的 emoji 表情输入法,用的 Unicod ...

  6. android没有捂脸表情,微信新emoji表情安卓机怎么没有?微信新emoji表情安卓机没有怎么回事?...

    在最新版ios版微信中不少用户在聊天时发现了新emoji表情哟,但是安卓机最新版即没有发现,那么微信新emoji表情安卓机怎么没有?微信新emoji表情安卓机没有怎么回事?下面小编就给大家具体介绍下. ...

  7. android没有捂脸表情,微信新emoji表情有哪些 新emoji表情安卓机怎么没有

    微信新emoji表情全面上线,搞怪的表情让很多用户忍俊不禁,刚刚上线就受到大家的欢迎,还没有使用的小伙伴看这个,小编给大家详细的讲讲吧. 微信新emoji表情一览 继苹果在iOS10.2测试版本新增了 ...

  8. java emoji表情_java处理emoji表情的方法

    最近项目中遇到emoji表情存储的问题,后来就在网上搜了很多, 总结出两种方法进行处理: 1.通过正则匹配进行过滤,代码如下: //emoji表情过滤 public static String fil ...

  9. mysql 苹果表情_mysql 插入emoji表情的时候报错问题。(苹果手机)

    一.问题现象 保存微信用户昵称到数据库,ios用户的昵称包含表情,插入数据库出错. 二.分析 使用JS过滤emoji表情的主要原因:input标签中输入emoji表情,提交表单后插入数据库报错. 原因 ...

  10. php保存emoji表情,php保存emoji表情

    最近一个朋友在调用微信接口的时候,获取到的数据保存到数据库失败了,原因是因为里面含有emoji表情,接下来吾爱编程为大家介绍一下关于php保存emoji表情的方法,有需要的小伙伴可以参考一下: 1.保 ...

最新文章

  1. .prop()与.attr()
  2. 获取当前脚本所在的绝对路径
  3. 服务器于本地间进行复制粘贴
  4. 【webservice】JAX-WS独立服务使用
  5. 小米:停止2016年发布的红米手机升级推送
  6. win7下ngnix mysql php的安装_windows7下nginx +mysql+多版本PHP共存安装方法
  7. Pycharm 简单一步设置成官方中文版
  8. loadrunner 及 QTP 下载地址
  9. linux中nbu主机备份,NBU60网络备份大全之Linux设备管理.doc
  10. python爬取音乐下载_Python爬取全抖音好听背景音乐,一次性下载
  11. 爬取天眼查 的python 代码
  12. HTML的图文排版,css 文章内容排版实例
  13. 为什么RGB 与 CMYK的差异,会有所不同?
  14. 微软zone DNS服务器,在DNS服务器上创建DNS zone
  15. 【机器学习】生成式模型和判别式模型
  16. windows10下openpose的安装和配置使用教程(C++),以及常见错误分析。
  17. VB.NET语法基础学习
  18. ccf2016年4月10日认证考试 俄罗斯方块问题思路
  19. Vue中实现鼠标悬浮完成图片替换
  20. java计算身体质量指数

热门文章

  1. 火线安全:Log4j2 史诗级漏洞波及全球6万+开源软件
  2. 硬盘(IDE硬盘与SCSI硬盘)在Linux标识的命名规则
  3. Python中sys模块
  4. Windows server2016 计算机管理中找不到用户和组
  5. 手机图片如何识别成文字
  6. python做得好玩游戏免费
  7. Cloud 团队:让 TiDB 在云上跳舞 | PingCAP 招聘季
  8. 我国的5年计划与软件项目计划-滚动计划
  9. Retrofit 使用 DELETE 方式
  10. 现代软件工程讲义 4 方法论 - MSF