如何使用 javascript 删除表情符号代码?

新手上路,请多包涵

如何使用 JavaScript 删除表情符号代码?我以为我已经使用下面的代码解决了它,但我仍然有像🔴这样的字符。

 function removeInvalidChars() {
    return this.replace(/[\uE000-\uF8FF]/g, '');
}

原文由 manraj82 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 866
2 个回答

您选择的范围是Private Use Area,包含非标准字符。运营商过去常常将表情符号编码为该范围内不同的、不一致的值。

最近,表情符号被赋予了标准化的“统一”代码点。其中许多在基本多语言平面之外,在块 U+1F300–U+1F5FF 中,包括您的示例🔴U+1F534 大红圈。

您可以在支持非 BMP 字符的正则表达式引擎中使用 [\U0001F300-\U0001F5FF] 检测这些字符,但 JavaScript 的 RegExp 不是这样的野兽。不幸的是,JS 字符串模型是基于 UTF-16 代码单元的,因此您必须在正则表达式中使用 UTF-16 代理项:

 return this.replace(/([\uE000-\uF8FF]|\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDDFF])/g, '')

但是,请注意,基本多语言平面中还有其他字符被手机用作表情符号,但早于表情符号。例如,U+2665 是传统的 Heart Suit 字符 ♥,但它可能会在某些设备上呈现为表情符号图形。是否将其视为表情符号并尝试将其删除取决于您。有关更多示例,请参阅 此列表

原文由 bobince 发布,翻译遵循 CC BY-SA 4.0 许可协议

对我来说,没有一个答案完全删除所有表情符号,所以我不得不自己做一些工作,这就是我得到的:

 text.replace(/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g, '');

此外,还应考虑到,如果稍后将字符串插入数据库,用空字符串替换可能会暴露安全问题。而是替换为替换字符 U+FFFD,请参阅: http ://www.unicode.org/reports/tr36/#Deletion_of_Noncharacters

原文由 jony89 发布,翻译遵循 CC BY-SA 4.0 许可协议

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