我需要有关如何检测输入是否包含日语表情符号/表情符号的帮助。
目前我的字符集是charset=utf-8
。输入文本时,用户可以输入日文字符/字母数字/符号,但如果插入表情符号,onsubmit
JavaScript 将检查是否存在表情符号,并显示错误消息。
我无法让它工作,因为我不知道如何在 JavaScript 中检测表情符号?
最佳答案
答案可能有效,但很糟糕,因为它们依赖于不可读且有点“神奇”的 unicode 范围,因为并不总是清楚它们来自哪里以及它们为什么起作用,更不用说它们对新的表情符号没有弹性被添加到规范中。
主要浏览器现在支持 unicode property escape,它允许根据表情符号在 Emoji
unicode 类别中的归属来匹配表情符号:\p{Emoji}
匹配表情符号,\P{Emoji}
匹配非表情符号。
请注意, officially 、 0123456789#*
和其他字符也是表情符号,因此您可能想要使用的属性转义不是 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/