首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用javascript检测表情符号

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

Stack Overflow用户
提问于 2013-09-18 09:02:15
回答 9查看 45.3K关注 0票数 57

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

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

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

EN

回答 9

Stack Overflow用户

发布于 2020-09-22 17:47:44

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

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

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

请确保在末尾包含the u flag

代码语言:javascript
复制
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

代码语言:javascript
复制
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]

票数 59
EN

Stack Overflow用户

发布于 2016-12-15 20:48:51

您可以使用以下正则表达式:

代码语言:javascript
复制
/(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g

如果你只是想把它从字符串中删除,你可以这样做。

代码语言:javascript
复制
function removeEmojis (string) {
  var regex = /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])/g;

  return string.replace(regex, '');
}
票数 34
EN

Stack Overflow用户

发布于 2018-06-10 02:16:10

您可以使用此库emoji-regex中的正则表达式

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18862256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档