【问题标题】:How to check if the input is emoji without using regular expression?如何在不使用正则表达式的情况下检查输入是否为表情符号?
【发布时间】:2020-01-03 03:26:40
【问题描述】:

我是 Web 开发的新手,出于性能原因,我只是尝试检查用户输入是否包含表情符号而不使用正则表达式。 有没有办法在前端使用 JavaScript 或在后端使用 java?

【问题讨论】:

    标签: javascript java dom


    【解决方案1】:

    与其尝试将表情符号列入黑名单,不如将您确实希望允许的字符列入白名单可能更容易。如果您的网站是多语言的,则必须添加要支持的语言的字符。遍历输入的每个字符并查看它是否在有效字符列表中应该相对简单。

    您需要同时在前端和后端进行验证。你想做前端,这样你就可以立即向用户显示反馈,你必须在后端进行验证,这样人们就不能通过打开浏览器的控制台或发挥创意来玩弄你的系统。前端的东西一般不应该被服务器信任。

    【讨论】:

    • 感谢您的建议。我想要做的实际上是阅读表情符号并将它们保存到数据库中。但我不知道这是否可能
    • 啊,在这种情况下,白名单对你不起作用。不过,这似乎是一件很奇怪的事情。例如,用户尝试使用的表情符号数据库有什么用途?
    • 我只是在考虑是否有可能像我可以存储在数据库中的键 = 值对,其中“键”是一个表情符号。
    • 一切皆有可能,我只是好奇你为什么要这么做。
    【解决方案2】:

    Java 不识别表情符号

    官方Unicode Character Database确实根据Unicode® Technical Standard #51 UNICODE EMOJIAnnex 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:人脸在猫脸之前,等等。表情符号字符的代码点是相当随意分配的,因此不要按此进行排序。

    【讨论】:

      猜你喜欢
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      • 2018-11-28
      • 2021-12-26
      相关资源
      最近更新 更多