android edittext过滤表情,EditText过滤emoji表情
导语
最近在项目中遇到一个输入法自带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表情相关推荐
- emoji昵称php,php过滤微信用户昵称emoji表情方法汇总 - 旗云号
php过滤微信用户昵称emoji表情方法汇总 微信用户昵称带emoji表情的话,保存数据库会报错,解决办法有两种:一.修改数据库表和字段的字符集为utf8mb4:二.过滤emoji表情字符:根据自己的 ...
- python过滤文本中的emoji表情
python过滤文本中的emoji表情 最近在处理文本内容的时候发现很多文本会有特色表情,由于占位较多,想着能过滤掉就好,也不影响文本内容含义,并且对后续做语义分析也有帮助. 网上搜了下,总体还是通过 ...
- android 过滤emoji表情符号,android怎样过滤字符串中的emoji表情
满意答案 jdubysct 2016.03.15 采纳率:43% 等级:8 已帮助:863人 解决方案 对于字符串处理,首选就是正则表达式去处理,而在android系统中可以自定义InputFi ...
- mysql 过滤emoji表情_MySQL中emoji表情过滤
问题描述 最近在对线上排错过程中发现很多入库时产生的错误日志,表现形态如下 Incorrectstringvalue:'\xF0\x9F\x91\x8D\xE6\x94...'forcolumn'co ...
- 过滤字符串中的Emoji表情
iOS 5.0之前,苹果都是采用3个字节来承接 emoji 表情,Java 的普通 char 可以支持显示.但 iOS 5.0 之后, 苹果升级了系统自带的 emoji 表情输入法,用的 Unicod ...
- android没有捂脸表情,微信新emoji表情安卓机怎么没有?微信新emoji表情安卓机没有怎么回事?...
在最新版ios版微信中不少用户在聊天时发现了新emoji表情哟,但是安卓机最新版即没有发现,那么微信新emoji表情安卓机怎么没有?微信新emoji表情安卓机没有怎么回事?下面小编就给大家具体介绍下. ...
- android没有捂脸表情,微信新emoji表情有哪些 新emoji表情安卓机怎么没有
微信新emoji表情全面上线,搞怪的表情让很多用户忍俊不禁,刚刚上线就受到大家的欢迎,还没有使用的小伙伴看这个,小编给大家详细的讲讲吧. 微信新emoji表情一览 继苹果在iOS10.2测试版本新增了 ...
- java emoji表情_java处理emoji表情的方法
最近项目中遇到emoji表情存储的问题,后来就在网上搜了很多, 总结出两种方法进行处理: 1.通过正则匹配进行过滤,代码如下: //emoji表情过滤 public static String fil ...
- mysql 苹果表情_mysql 插入emoji表情的时候报错问题。(苹果手机)
一.问题现象 保存微信用户昵称到数据库,ios用户的昵称包含表情,插入数据库出错. 二.分析 使用JS过滤emoji表情的主要原因:input标签中输入emoji表情,提交表单后插入数据库报错. 原因 ...
- php保存emoji表情,php保存emoji表情
最近一个朋友在调用微信接口的时候,获取到的数据保存到数据库失败了,原因是因为里面含有emoji表情,接下来吾爱编程为大家介绍一下关于php保存emoji表情的方法,有需要的小伙伴可以参考一下: 1.保 ...
最新文章
- .prop()与.attr()
- 获取当前脚本所在的绝对路径
- 服务器于本地间进行复制粘贴
- 【webservice】JAX-WS独立服务使用
- 小米:停止2016年发布的红米手机升级推送
- win7下ngnix mysql php的安装_windows7下nginx +mysql+多版本PHP共存安装方法
- Pycharm 简单一步设置成官方中文版
- loadrunner 及 QTP 下载地址
- linux中nbu主机备份,NBU60网络备份大全之Linux设备管理.doc
- python爬取音乐下载_Python爬取全抖音好听背景音乐,一次性下载
- 爬取天眼查 的python 代码
- HTML的图文排版,css 文章内容排版实例
- 为什么RGB 与 CMYK的差异,会有所不同?
- 微软zone DNS服务器,在DNS服务器上创建DNS zone
- 【机器学习】生成式模型和判别式模型
- windows10下openpose的安装和配置使用教程(C++),以及常见错误分析。
- VB.NET语法基础学习
- ccf2016年4月10日认证考试 俄罗斯方块问题思路
- Vue中实现鼠标悬浮完成图片替换
- java计算身体质量指数