我正在尝试解析传入的字符串以确定它是否包含任何非表情符号。
我已经阅读了Mathias 的这篇很棒的文章,并利用本机punycode
进行编码/解码和regenerate
生成正则表达式。我还使用EmojiData来获取我的表情符号字典。
话虽如此,某些表情符号仍然是讨厌的小虫子,拒绝匹配。对于某些表情符号,我继续获得一对代码点。
// Example of a single code point:
console.log(punycode.ucs2.decode(''));
>> [ 128169 ]
// Example of a paired code point:
console.log(punycode.ucs2.decode('⌛️'));
>> [ 8987, 65039 ]
Mathias 在他的文章中谈到了这一点(并给出了一个解决此问题的 punycode 示例),但即使使用他的示例,我也得到了不正确的响应:
function countSymbols(string) {
return punycode.ucs2.decode(string).length;
}
console.log(countSymbols(''));
>> 1
console.log(countSymbols('⌛️'));
>> 2
检测字符串是否包含所有表情符号的最佳方法是什么?这是为了概念验证,因此解决方案可以根据需要使用蛮力。
- - 更新 - -
上面我讨厌的表情符号的更多上下文。
这些在视觉上是相同的,但实际上是不同的 unicode 值(第二个来自上面的示例):
⌛ // \u231b
⌛️ // \u231b\ufe0f
第一个效果很好,第二个不行。不幸的是,第二个版本是 iOS 似乎使用的(如果你从 iMessage 复制和粘贴,你会得到第二个,当接收到来自 Twilio 的文本时,同样的事情)。