js如何过滤掉世界上所有的emoji??

万能的大大们,
有没有办法能过滤掉 所有 的emoji表情??包括各种输入法自带的,苹果手机自带的

为了过滤掉emoji,我现在用的是:

clipboard.png

但现在发现这句话并不能过滤掉全部的emoji,比如三星手机,讯飞输入法中的一部分(虽然超级萌)的表情

阅读 9.5k
4 个回答

/uD83C|uD83D|uD83E[u200D|uFE0F]|uD83C|uD83D|uD83E|[0-9|*|#]uFE0Fu20E3|[0-9|#]u20E3|[u203C-u3299]uFE0Fu200D|[u203C-u3299]uFE0F|[u2122-u2B55]|u303D|[A9|AE]u3030|uA9|uAE|u3030/ig;

这里是世界 emoji 大全了:https://apps.timwhitlock.info...

所有的 emoji 表情囊括在以下范围中:

U+2190 to U+21FF
U+2600 to U+26FF
U+2700 to U+27BF
U+3000 to U+303F
U+1F300 to U+1F64F
U+1F680 to U+1F6FF

正则可以这么写/[\u2190-\u21FF]|[\u2600-\u26FF]|[\u2700-\u27BF]|[\u3000-\u303F]|[\u1F300-\u1F64F]|[\u1F680-\u1F6FF]/g

新手上路,请多包涵
const emojiSeq = String.raw`(?:\p{Emoji}\uFE0F\u20E3?|\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation})`;
const emojiSTags = String.raw`\u{E0061}-\u{E007A}`;
const emojiRegex = new RegExp(String.raw`[\u{1F1E6}-\u{1F1FF}]{2}|\u{1F3F4}[${emojiSTags}]{2}[\u{E0030}-\u{E0039}${emojiSTags}]{1,3}\u{E007F}|${emojiSeq}(?:\u200D${emojiSeq})*`, 'gu');

String.prototype.replaceEmojis = function (replace) {
    return this.replaceAll(emojiRegex, replace ?? '');
}

例子:

"包含Emoji的字符串".replaceEmojis("替换Emoji的字符串");

修改自:
https://github.com/slevithan/emoji-regex-xs

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题