2

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

 handle

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

要检查返回的数字的有效性,我需要知道什么构成了有效的 Noto 字体 Emoji 代码。 本文似乎建议所有有效的表情符号都应将 0xF09fF or0xE29C` 作为字符 0 处的值 - 为了简单起见,我将忽略该资源中列出的三字节表情符号无效。

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

4

1 回答 1

4

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

在这里,我将使用表情符号测试表情符号:

/(?:[\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
于 2019-10-07T17:30:42.090 回答