在我们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. qt05 音乐播放器

    这些步骤可实现音乐播放,但是列表不能显示 music = new QMediaPlayer(this); playlist = new QMediaPlaylist(this); playlist-& ...

  2. 【LeetCode】哈希表 hash_table(共88题)

    [1]Two Sum (2018年11月9日,k-sum专题,算法群衍生题) 给了一个数组 nums, 和一个 target 数字,要求返回一个下标的 pair, 使得这两个元素相加等于 target ...

  3. 去除重复嵌套的html标签函数

    去除重复嵌套的html标签 function strip_multi_tags($str, $tag = 'div'){ preg_match_all('/<'.$tag.'>|<\ ...

  4. Linux学习-基于CentOS7的MariaDB数据库的主从复制

    一.MySQL主从复制原理 主从同步过程中主服务器有一个工作线程I/O dump thread,从服务器有两个工作线程I/O thread和SQL thread: 主服务器: dump Thread: ...

  5. dict常用操作

    dict是python中的常用数据结构,应该尽量掌握其使用方法 """ 初始化一个dict的四种方式: 1. dict() -> 创建一个空的dict 2. dic ...

  6. ClickOnce是什么?如何使用?

    ClickOnce是一种部署方式,主要解决C/S软件版本更新后,所有客户端都要重新安装的问题. 场景:假如,你的客户有1000个,你的服务端更新后,这1000个客户都要重新安装,难道要员工一个一个的电 ...

  7. php implode()函数 语法

    php implode()函数 语法 作用:把数组元素组合为字符串惠州大理石平板 语法:implode(separator,array) 参数: 参数 描述 separator     可选.规定数组 ...

  8. dijkstra求最小环

    任意一个环的权值,我们都可以看成两个有边相连的结点i.j的直接距离加上i.j间不包含边(边i->j)的最短路径. 求最短路径我们第一个想到的就是Dijkstra算法. 而Dijkstra所求的是 ...

  9. Java WebService服务

    其中cxf框架 http://cxf.apache.org/ Apache CXF™: An Open-Source Services Framework Overview Apache CXF™ i ...

  10. Oracle dmp文件(表)导入与导出

    dmp文件是作为oracle导入和导出表使用的文件格式dmp文件导出dmp文件导出用的比较多的一般是三种,他们分别是:1.导出整个数据库实例下的所有数据2.导出指定用户的所有表3.导出指定表. 打开命 ...