java特殊字符emoji校验

String symptomdesc = para.getString("symptomdesc");
if (Validator.notNull(symptomdesc)) {
if(containsEmoji(symptomdesc)){
return PortReturn.succeed(map, ErrCode.FAIL,"不可传入表情文字!");
}

}



public static boolean containsEmoji(String source) {
        int len = source.length();
        boolean isEmoji = false;
        for (int i = 0; i < len; i++) {
            char hs = source.charAt(i);
            if (0xd800 <= hs && hs <= 0xdbff) {
                if (source.length() > 1) {
                    char ls = source.charAt(i + 1);
                    int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
                    if (0x1d000 <= uc && uc <= 0x1f77f) {
                        return true;
                    }
                }
            } else {
                // non surrogate
                if (0x2100 <= hs && hs <= 0x27ff && hs != 0x263b) {
                    return true;
                } else if (0x2B05 <= hs && hs <= 0x2b07) {
                    return true;
                } else if (0x2934 <= hs && hs <= 0x2935) {
                    return true;
                } else if (0x3297 <= hs && hs <= 0x3299) {
                    return true;
                } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d
                        || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c
                        || hs == 0x2b1b || hs == 0x2b50 || hs == 0x231a) {
                    return true;
                }
                if (!isEmoji && source.length() > 1 && i < source.length() - 1) {
                    char ls = source.charAt(i + 1);
                    if (ls == 0x20e3) {
                        return true;
                    }
                }
            }
        }
        return isEmoji;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中可以使用Unicode编码来匹配emoji字符。每个emoji字符都有一个唯一的Unicode编码,可以在正则表达式中使用。以下是一个示例代码,演示如何使用Java正则表达式匹配emoji字符: ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class EmojiMatcher { public static void main(String[] args) { String text = "This is a string with an emoji: \uD83D\uDC4D"; Pattern pattern = Pattern.compile("[\\x{1F000}-\\x{1F6FF}\\x{2600}-\\x{26FF}\\x{2700}-\\x{27BF}\\x{1F900}-\\x{1F9FF}\\x{1F300}-\\x{1F5FF}\\x{1F680}-\\x{1F6FF}\\x{1F1E0}-\\x{1F1FF}\\x{1F191}-\\x{1F251}\\x{1F600}-\\x{1F64F}\\x{1F680}-\\x{1F6FF}\\x{2600}-\\x{26FF}\\x{2700}-\\x{27BF}\\x{1F300}-\\x{1F5FF}\\x{1F900}-\\x{1F9FF}\\x{1F1E6}-\\x{1F1FF}\\x{1F600}-\\x{1F64F}\\x{1F680}-\\x{1F6FF}\\x{1F918}-\\x{1F9FF}\\x{1F910}-\\x{1F917}\\x{1F980}-\\x{1F984}\\x{1F9C0}]"); Matcher matcher = pattern.matcher(text); while (matcher.find()) { System.out.println("Found emoji: " + matcher.group()); } } } ``` 该代码使用了Unicode编码范围来匹配emoji字符。其中,`\x{1F000}-\x{1F6FF}`表示基本的emoji字符,`\x{2600}-\x{26FF}`和`\x{2700}-\x{27BF}`表示其他符号和图形,`\x{1F900}-\x{1F9FF}`表示补充符号和象形文字,`\x{1F300}-\x{1F5FF}`表示其他符号和象形文字,`\x{1F680}-\x{1F6FF}`表示交通和地图符号,`\x{1F1E0}-\x{1F1FF}`表示国旗,`\x{1F191}-\x{1F251}`表示其他符号(箭头、星号等),`\x{1F600}-\x{1F64F}`表示表情符号,`\x{1F1E6}-\x{1F1FF}`表示国家地区旗帜,`\x{1F918}-\x{1F9FF}`表示人物和身体部位,`\x{1F910}-\x{1F917}`表示表情符号,`\x{1F980}-\x{1F984}`表示食品和饮料,`\x{1F9C0}`表示物品。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值