package com.mylhyl.circledialog.internal; import android.text.InputFilter; import android.text.Spanned; import java.util.regex.Pattern; /** * Created by hupei on 2018/11/1 11:21. */ public class EmojiFilter implements InputFilter { Pattern emojiPattern = Pattern.compile("[\ud83c\udc00-\ud83c\udfff]|[\ud83d\udc00-\ud83d\udfff]|[\u2600-\u27ff]", Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE); public EmojiFilter() { } /** * 检测是否有emoji表情 * * @param source * @return */ private static boolean containsEmoji(CharSequence source) { int len = source.length(); for (int i = 0; i < len; i++) { char codePoint = source.charAt(i); // 如果不能匹配,则该字符是Emoji表情 if (!isEmojiCharacter(codePoint)) { return true; } } return false; } /** * 判断是否是Emoji * * @param codePoint 比较的单个字符 * @return */ 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)); } @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { if (this.emojiPattern.matcher(source).find() || containsEmoji(source)) { return ""; } return source; } }