javascript - 如何使用 javascript 检测表情符号

标签 javascript emoji

我需要有关如何检测输入是否包含日语表情符号/表情符号的帮助。

目前我的字符集是charset=utf-8。输入文本时,用户可以输入日文字符/字母数字/符号,但如果插入表情符号,onsubmit JavaScript 将检查是否存在表情符号,并显示错误消息。

我无法让它工作,因为我不知道如何在 JavaScript 中检测表情符号?

最佳答案

答案可能有效,但很糟糕,因为它们依赖于不可读且有点“神奇”的 unicode 范围,因为并不总是清楚它们来自哪里以及它们为什么起作用,更不用说它们对新的表情符号没有弹性被添加到规范中。

主要浏览器现在支持 unicode property escape,它允许根据表情符号在 Emoji unicode 类别中的归属来匹配表情符号:\p{Emoji} 匹配表情符号,\P{Emoji} 匹配非表情符号。

请注意, officially0123456789#* 和其他字符也是表情符号,因此您可能想要使用的属性转义不是 Emoji 而是 Extended_Pictographic 表示通常被理解为表情符号的所有字符!

确保在末尾包含 the u flag

console.log(
  /\p{Emoji}/u.test('flowers'), // false :)
  /\p{Emoji}/u.test('flowers 🌼🌺🌸'), // true :)
  /\p{Emoji}/u.test('flowers 123'), // true :( 
)
console.log(
  /\p{Extended_Pictographic}/u.test('flowers'), // false :)
  /\p{Extended_Pictographic}/u.test('flowers 🌼🌺🌸'), // true :)
  /\p{Extended_Pictographic}/u.test('flowers 123'), // false :)
)

这对于检测表情符号来说效果很好,但是如果您想使用相同的正则表达式来提取它们,您可能会对它的行为感到惊讶,因为出现一些表情符号因为一个字符实际上是多个字符。它们就是我们所说的表情符号序列,更多关于它们的信息 in this question

const regex = /\p{Extended_Pictographic}/ug
const family = '👨‍👩‍👧' // "family 
console.log(family.length) // not 1, but 8!
console.log(regex.test(family)) // true, as expected
console.log(family.match(regex)) // not [family], but [man, woman, girl]

另请参阅:

关于javascript - 如何使用 javascript 检测表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18862256/

相关文章:

javascript - 使用 TypeScript 进行 react : State Initiations in constructor

ios - 我可以禁用 UITextField 中的表情符号图标吗?

jquery - 一个页面中的两个 Emojione 区域

javascript - 返回 JavaScript 中包装的对象

javascript - MSoft是否为MVC3应用程序使用的服务器端错误插件或工具提供持久的客户端错误报告?

javascript - innerHTML 和 <embed> 怎么了?

javascript - 对 knockout 可观察数组进行排序

iphone - 我可以在 iOS 项目名称中添加表情符号图标吗?

java - 如何在scala中获取笑脸的Unicode

objective-c - iOS 8 在 UITextView 中为彩色字符串的表情符号图标后自动添加空格