【问题标题】:Recognising Emojis in typed text识别输入文本中的表情符号
【发布时间】:2019-09-04 11:23:57
【问题描述】:

在我的混合 Android/Cordova 应用程序中,我希望允许用户将表情符号与描述性“句柄”/名称相关联。我发现在 Android 8+ 中默认的 HTML 输入框 - 请记住这是一个混合应用程序,因此 UI 实际上是直接从 Chrome 派生的 WebView - 可以简单地切换到表情符号键盘并选择一个表情符号。我的理解是这些表情符号来自谷歌的 Noto 字体项目。我希望用户能够用于输入表情符号 + 句柄的格式是

???? handle

句柄必须是字母数字。使用正则表达式测试字母数字部分和前面的空格不是问题。但是,我还想检查前两个字节是否是表情符号(不是强制性的)。再一次,这可以通过将前两个字符设置为 userhandle.charCodeAt(0|1) 来完成。

要检查返回的数字的有效性,我需要知道什么是有效的 Noto 字体 Emoji 代码。 This article 似乎暗示所有有效的 Emojis 都应该将 0xF09fFor0xE29C` 作为 Char 0 处的值 - 为了简单起见,我将忽略该资源中列出的三字节 Emojis 无效。

但是,在我实施此之前,我想知道 - 是否有一种既定的方法来验证我在这里不知道的 Emoji unicode?​​p>

【问题讨论】:

    标签: javascript android google-chrome webview emoji


    【解决方案1】:

    article 提供了很多关于 javascript 中表情符号的详细信息,并提供了一个您可以使用的正则表达式。我认为这适用于所有表情符号,但您需要对其进行测试。

    在这里,我将使用 ? emoji 来测试一个 emoji:

    /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?)*/.test(String.fromCodePoint("?".codePointAt(0)))  //returns true
    

    使用相同的正则表达式但测试“A”字符:

    /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?(?:\u200d(?:[^\ud800-\udfff]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])[\ufe0e\ufe0f]?(?:[\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0]|\ud83c[\udffb-\udfff])?)*/.test(String.fromCodePoint("A".codePointAt(0)))  //returns false
    

    如果你只想获取代码点,你可以使用:

    "?".codePointAt(0)  //returns 127828
    

    【讨论】:

    • 谢谢!正是完美的答案,多亏了它,我现在知道 codePointAt 非常方便。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多