在我们Android开发的项目中,难免有要求在输入框中禁止输入表情,所以呢,写了一个输入框禁止输入表情的demo,供大伙参考

效果图

如图显示,如果用户输入了表情字符,会提示。

EmojiFilter(表情过滤器)

public class EmojiFilter {

/** 匹配非表情符号的正则表达式 */

public static final String reg = "^([a-z]|[A-Z]|[0-9]|[\u2E80-\u9FFF]){3,}|@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?|[wap.]{4}|[www.]{4}|[blog.]{5}|[bbs.]{4}|[.com]{4}|[.cn]{3}|[.net]{4}|[.org]{4}|[http://]{7}|[ftp://]{6}$";

public static final Pattern pattern = Pattern.compile(reg);

/**

* 检测是否有emoji字符

*

* @param source

* @return FALSE,包含图片

*/

public static boolean containsEmoji(String source) {

if (source.equals("")) {

return false;

}

int len = source.length();

for (int i = 0; i < len; i++) {

char codePoint = source.charAt(i);

if (isEmojiCharacter(codePoint)) {

// do nothing,判断到了这里表明,确认有表情字符

return true;

}

}

return false;

}

private static boolean isEmojiCharacter(char codePoint) {

return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)

|| (codePoint == 0xD)

|| ((codePoint >= 0x20) && (codePoint <= 0xD7FF))

|| ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))

|| ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));

}

/**

* 过滤emoji 或者 其他非文字类型的字符

*

* @param source

* @return

*/

public static String filterEmoji(String source) {

if (!containsEmoji(source)) {

return source;// 如果不包含,直接返回

}

// 到这里铁定包含

StringBuilder buf = null;

int len = source.length();

for (int i = 0; i < len; i++) {

char codePoint = source.charAt(i);

if (isEmojiCharacter(codePoint)) {

if (buf == null) {

buf = new StringBuilder(source.length());

}

buf.append(codePoint);

} else {

}

}

if (buf == null) {

return source;// 如果没有找到 emoji表情,则返回源字符串

} else {

if (buf.length() == len) {// 这里的意义在于尽可能少的toString,因为会重新生成字符串

buf = null;

return source;

} else {

return buf.toString();

}

}

}

}

demo下载地址:

http://download.csdn.net/download/xinanheishao/9870832

Android禁止输入表情符号的更多相关文章

  1. iOS自定义视图- SJTextView

    需求: textView 需要placeholder用来提示输入 textView 要做字数限制 textView 禁止表情符号的输入 思考: 因为需求比较通用,便想通过自定义SJTextView来实 ...

  2. Emoji表情符号兼容方案(适用ios,android,wp等平台)

    http://blog.csdn.net/qdkfriend/article/details/7576524 Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号:词义来自日语(え ...

  3. Android 横屏时禁止输入法全屏

    在自己EditText的xml里加上属性 android:imeOptions="flagNoExtractUi"

  4. android非法字符的判定、表情符号的判定

    public class EmojiEditText extends EditText {// 输入表情前的光标位置private int cursorPos; // 输入表情前EditText中的文 ...

  5. Android EditText的设置

    1.输入法Enter键图标的设置: 软件盘的界面替换只有一个属性android:imeOptions,这个属性的可以取的值有normal,actionUnspecified,actionNone,ac ...

  6. [Android教程]EditText怎样限制用户的输入?数字/字母/邮箱

    有输入必有验证.为了防止用户随便输入确保提交数据的合法性,程序不得不在文本输入框(EditText)中增加限制或验证. 关于输入类型有数字.字母.邮箱.电话等形式,这些具体得根据业务来.那么Andro ...

  7. Android EditText截获与监听输入事件

      Android EditText截获与监听输入事件共有2种方法: 1.第一种方法:使用setOnKeyListener(),不过这种方式只能监听硬键盘事件. edittext.setOnKeyLi ...

  8. android 自定义组件-带图片的textView

    1. 定义属性 <?xml version="1.0" encoding="utf-8"?> <resources> <decla ...

  9. Android EditText控件行尾为表情时的BUG

    今天处理项目上的一个诡异BUG,贴吧Android客户端发贴框是支持表情文字混排的,但是当发贴框的行内容末尾为表情时,尝试在表情后插入文字,就悲剧了:文字其实写进去了,但是不会显示出来.研究了一下,发 ...

随机推荐

  1. tf.cast()用法

    把布尔类型转化成0和1类型,true是1,false是0反之,亦成立.

  2. 理解Promise (3)

    在promise  的then  中我们不仅有 成功状态 失败状态,可能还有等待状态,所以我们要对等待状态进行处理 function Promise(executor) { let self = th ...

  3. CentOS7 利用systemctl添加自定义系统服务

    一.命令systemctl介绍 CentOS 7.0中已经没有service命令,而是启用了systemctl服务器命令,它实际上将 service 和 chkconfig 这两个命令组合到一起. 命 ...

  4. python高级:垃圾回收机制

    ---恢复内容开始--- 垃圾回收机制 1.计数引用机制 就是一个变量.数据结构.对象当没有人引用时,python的会启用垃圾回收机制,将其从内存中删除. 怎么看引用的次数呢?sys模块提供的sys. ...

  5. vue项目中router路由配置

    介绍 路由:控制组件之间的跳转,不会实现请求.不用页面刷新,直接跳转-切换组件>>> 安装 本地环境安装路由插件vue-router:    cnpm install vue-rou ...

  6. php array_sum()函数 语法

    php array_sum()函数 语法 作用:返回数组中所有值的和.大理石构件价格 语法:array_sum(arra) 参数: 参数 描述 array  必需.规定数组. 说明:如果所有值都是整数 ...

  7. 20180715-Java日期时间

    import java.util.Date;public class DateDemo{ public static void main(String[] args){ //初始化Date对象 Dat ...

  8. [hadoop](2) MapReducer:Distributed Cache

    前言 本章主要内容是讲述hadoop的分布式缓存的使用,通过分布式缓存可以将一些需要共享的数据在各个集群中共享. 准备工作 数据集:ufo-60000条记录,这个数据集有一系列包含下列字段的UFO目击 ...

  9. hbuilder+vue单页应用打包成APP后退按钮返回上一页的问题

    APP打包工具:hbuilder 需要js包:mui.js ,引入方法https://www.cnblogs.com/v616/p/11290281.html 实现原理:在vue根组件App.vue监 ...

  10. 纯css实现瀑布流(multi-column多列及flex布局)

    瀑布流的布局自我感觉还是很吸引人的,最近又看到实现瀑布流这个做法,在这里记录下,特别的,感觉flex布局实现瀑布流还是有点懵的样子,不过现在就可以明白它的原理了 1.multi-column多列布局实 ...