【发布时间】:2020-01-03 03:26:40
【问题描述】:
我是 Web 开发的新手,出于性能原因,我只是尝试检查用户输入是否包含表情符号而不使用正则表达式。 有没有办法在前端使用 JavaScript 或在后端使用 java?
【问题讨论】:
标签: javascript java dom
我是 Web 开发的新手,出于性能原因,我只是尝试检查用户输入是否包含表情符号而不使用正则表达式。 有没有办法在前端使用 JavaScript 或在后端使用 java?
【问题讨论】:
标签: javascript java dom
与其尝试将表情符号列入黑名单,不如将您确实希望允许的字符列入白名单可能更容易。如果您的网站是多语言的,则必须添加要支持的语言的字符。遍历输入的每个字符并查看它是否在有效字符列表中应该相对简单。
您需要同时在前端和后端进行验证。你想做前端,这样你就可以立即向用户显示反馈,你必须在后端进行验证,这样人们就不能通过打开浏览器的控制台或发挥创意来玩弄你的系统。前端的东西一般不应该被服务器信任。
【讨论】:
官方Unicode Character Database确实不根据Unicode® Technical Standard #51 UNICODE EMOJI的Annex A识别表情符号字符。
我想这就是为什么我们在 Java 13 类 Character 上看不到任何类型的 isEmoji 方法。
根据该附件 A,有可用的 emoji-data 数据文件描述表情符号字符的各个方面。如果您有足够的动力可靠地识别表情符号字符,我建议您阅读该技术说明,并考虑从这些文件中导入数据以识别表情符号的code points。 Unicode 联盟可能会使用一系列数字来对表情符号字符进行聚类。
请记住,Unicode 联盟近年来一直在频繁添加越来越多的表情符号。所以你将追逐一个移动的目标,需要更新。
您可以使用Character.UnicodeBlock 中定义的命名代码点范围来缩小范围。
我猜Character.OTHER_SYMBOL 可能会有所帮助,因为根据方便的 macOS 应用程序UnicodeChecker,我阅读的表情符号被如此标记。
仅供参考,Unicode 联盟确实发布了表情符号列表:Full Emoji List, v12.0。
顺便说一句,由 Unicode Consortium 发布并在最近的 Java 版本中默认使用的 CLDR 定义了如何对表情符号进行排序。是的,emoji have sort-order:人脸在猫脸之前,等等。表情符号字符的代码点是相当随意分配的,因此不要按此进行排序。
【讨论】: