某些表情符号与我的仅表情符号正则表达式不匹配

时间:2019-07-29 21:06:31

标签: javascript regex emoji

我正在建立聊天,我想在仅包含表情符号的情况下增加文本的字体大小

因此,我们拥有与所有表情符号匹配的正则表达式。 https://www.regextester.com/106421

我将其移至JS函数中,但有一些函数未返回true(即使它们在上述Regex链接中匹配)。

var emojiRanges = [
  '\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]',
  ' ',
].join('|')


function isEmojiOnly(text) {
  text = text.replace(new RegExp(emojiRanges, 'g'), '')
  return text.length === 0
}


console.log(isEmojiOnly('??????')) // returns true
console.log(isEmojiOnly('?????????????')) // returns true
console.log(isEmojiOnly('?️')) // returns false
console.log(isEmojiOnly('☘️')) // returns false

在Facebook Messenger上效果很好

enter image description here

有什么主意吗? =)

2 个答案:

答案 0 :(得分:2)

这是一个稍大的正则表达式,但只能匹配表情符号或空格。

     this.setState({
      overallDetails: [
        ...this.state.overallDetails,
        ...details.map(detail => ({
          ...detail,
          test: "test"
        }))
      ],

答案 1 :(得分:1)

可接受的答案有效,但是很脏。

主要的浏览器现在支持unicode property escape,该功能允许根据其在Emoji unicode类别中的归属来匹配表情符号:\p{Emoji}匹配表情符号,P{Emoji}匹配非表情符号。确保在末尾包含the u flag

const isOnlyEmojis = str => /^\p{Emoji}*$/gu.test(str);

console.log(isOnlyEmojis('?')); // true
console.log(isOnlyEmojis('???')); // true
console.log(isOnlyEmojis('hello ?')); // false
console.log(isOnlyEmojis('hello')); // false