在我的Android / Cordova混合应用程序中,我希望允许用户将表情符号与描述性的“句柄” /名称相关联。我发现,在Android 8+中,默认HTML输入框-记住这是一个混合应用程序,因此UI实际上是直接从Chrome派生的WebView-可以简单地切换到Emoji键盘并选择一个Emoji。我的理解是这些表情符号来自Google的Noto字体项目。我希望用户能够输入表情符号+手柄的格式为
? handle
其中句柄必须为字母数字。使用正则表达式测试字母数字部分和前面的空格不是问题。但是,我还想检查一下前两个字节是否是表情符号(不是必须的)。同样,可以通过将前两个字符设为userhandle.charCodeAt(0|1)
来完成此操作。
要检查由此返回的数字的有效性,我需要知道什么构成有效的Noto字体表情符号代码。 This article似乎建议所有有效的表情符号都应具有0xF09fF or
0xE29C`作为Char 0处的值-为了简化起见,我将忽略该资源中列出的三字节表情符号。>
但是,在执行此操作之前,我想知道-是否存在一种确定的方法来验证我在这里不知道的Emoji unicode? p>
答案 0 :(得分:4)
此article提供了有关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