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

Posted

技术标签:

【中文标题】如何使用 javascript 删除表情符号代码?【英文标题】:How to remove emoji code using javascript? 【发布时间】:2012-06-15 02:45:05 【问题描述】:

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

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

【问题讨论】:

There's a lot of characters in that range -- 也许您应该删除您不喜欢的单个代码点? 我认为***.com/questions/3744721/… 回答了你的问题。 这是一篇很好的文章,也涉及这些范围:crocodillon.com/blog/parsing-emoji-unicode-in-javascript 【参考方案1】:

您选择的范围是私人使用区域,包含非标准字符。运营商用于将表情符号编码为此范围内的不同、不一致的值。

最近,表情符号被赋予了标准化的“统一”代码点。其中许多都在基本多语言平面之外,在 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 字符♥,但它可能会在某些设备上呈现为表情符号图形。是否将其视为表情符号并尝试将其删除取决于您。有关更多示例,请参阅this list。

【讨论】:

另外,应该考虑到如果稍后将字符串插入数据库,用空字符串替换可能会暴露安全问题。而是用替换字符 U+FFFD 替换,请参阅:unicode.org/reports/tr36/#Deletion_of_Noncharacters 您将如何处理具有多个代码点的表情符号,例如警告表情符号?那个使用 U+26A0 后跟 U+FE0F。您的正则表达式将保持第二个代码点不变【参考方案2】:

@bobince 的解决方案对我不起作用。表情符号要么留在那里,要么被不同的表情符号交换。

这个解决方案对我有用:

var ranges = [
  '\ud83c[\udf00-\udfff]', // U+1F300 to U+1F3FF
  '\ud83d[\udc00-\ude4f]', // U+1F400 to U+1F64F
  '\ud83d[\ude80-\udeff]' // U+1F680 to U+1F6FF
];


$('#mybtn').on('click', function() 
  removeInvalidChars();
)

function removeInvalidChars() 
  var str = $('#myinput').val();

  str = str.replace(new RegExp(ranges.join('|'), 'g'), '');
  $("#myinput").val(str);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="myinput"/>
<input type="submit" id="mybtn" value="clear"/>

Source

【讨论】:

此解决方案也不适用于许多角色,例如????????? 我输入了所有的表情符号列表。但是有些被清除了,结果是这个=✌??‍♂️?‍♀️❤??‍♀️?‍♂️‍‍?‍‍‍‍✔✨??【参考方案3】:

我知道这篇文章有点老了,但我在工作中偶然发现了这个问题,一位同事想出了一个有趣的想法。基本上不是剥离表情符号字符,而是只允许有效字符。参考这个 ASCII 表:

http://www.asciitable.com/

这样的函数只能保留合法字符(范围本身取决于您所追求的)

function (input) 
            var result = '';
            if (input.length == 0)
                return input;
            for (var indexOfInput = 0, lengthOfInput = input.length; indexOfInput < lengthOfInput; indexOfInput++) 
                var charAtSpecificIndex = input[indexOfInput].charCodeAt(0);
                if ((32 <= charAtSpecificIndex) && (charAtSpecificIndex <= 126)) 
                    result += input[indexOfInput];
                
            
            return result;
        ;

在您希望保留英文字母 + 数字 + 特殊字符的情况下,这应该保留 Alphabet 的所有数字、字母和特殊字符。希望它可以帮助某人:)

【讨论】:

太棒了。会添加新行和回车(ASCII 10 和 13) 如果我需要保留特定于语言环境的字符,如西里尔文、希伯来文等,该怎么办【参考方案4】:

这里的答案都不适用于我测试的所有 unicode 字符(特别是杂项范围内的字符,例如 ⛽ 或 ☯️)。

这是一个对我有用的,(很大程度上)灵感来自this SO php answer:

function _removeEmojis(str) 
  return str.replace(/([#0-9]\u20E3)|[\xA9\xAE\u203C\u2047-\u2049\u2122\u2139\u3030\u303D\u3297\u3299][\uFE00-\uFEFF]?|[\u2190-\u21FF][\uFE00-\uFEFF]?|[\u2300-\u23FF][\uFE00-\uFEFF]?|[\u2460-\u24FF][\uFE00-\uFEFF]?|[\u25A0-\u25FF][\uFE00-\uFEFF]?|[\u2600-\u27BF][\uFE00-\uFEFF]?|[\u2900-\u297F][\uFE00-\uFEFF]?|[\u2B00-\u2BF0][\uFE00-\uFEFF]?|(?:\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDEFF])[\uFE00-\uFEFF]?/g, '');

(我的用例是在数据网格中排序,其中表情符号可以在字符串中排在第一位,但用户希望文本按实际单词排序。)

【讨论】:

谢谢你。我注意到的一件事是它并没有捕捉到所有的表情符号。我找到了另一个正则表达式字符串,但它正在做一些时髦的事情,比如删除之前的字符并添加字符。我似乎无法弄清楚其中的区别。这是您和其他人在 JSbin 中的比较:link 谢谢。这节省了我很多时间。不要忘记在末尾添加.trim()以删除空格。【参考方案5】:

我找到了很多建议,但解决我问题的正则表达式是:

/(?:[\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

一个简短的例子

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, '');

希望对你有帮助

【讨论】:

对我来说很好的答案。然而,正则表达式中的错误会导致它也匹配右括号 ([)。看起来只是复制和粘贴代码的错误,但卢卡斯请修复。此处修复正则表达式:pastebin.com/0VZZKfWf 感谢您的建议,@MarcGuiselin 我会用 [\u200d] 和 [\ufe0f] 扩展给定的正则表达式。它们都是特殊字符,有助于创建表情符号序列。如果您只使用上面的正则表达式来删除表情符号,您的文本将包含很多这些空白字符。见evgenyzborovsky.com/2018/04/07/the-ultimate-guide-to-emojis【参考方案6】:

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

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

【讨论】:

尝试了很多解决方案,但是这个非常成功!给任何使用 Twitter API 的人的说明 - 这对我有用! 这涵盖了一个相当稳定的范围,但我不得不进行一些编辑以弥补一些遗漏。具体来说,我将现有字符集 [\u2694-\u2697] 扩展为 [\u2580-\u27BF] 以包含一些额外的形状和 dingbats,它们现在与常见的❤️ 字符 (\u2764\uFE0F) 匹配。我还将\uD83E[\uDD10-\uDD5D] 扩展到\uD83E[\uDD10-\uDDFF] 以捕捉一些表情符号,例如?、?、?、? 和?。 @CalebMiller,您愿意发布您的最终正则表达式吗? 嗨@avalanche1,是的,这就是我使用的,我最终也做了额外的改进:/[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2580-\u27BF]|\uD83E[\uDD10-\uDDFF]/g 这不会删除这种 1️⃣ (1\uFE0F\u20E3)【参考方案7】:

sandre89's answer 不错,但并不完美。 我花了一些时间在这个主题上,并有了一个可行的解决方案。

var ranges = [
  '[\u00A0-\u269f]',
  '[\u26A0-\u329f]',
  // The following characters could not be minified correctly
  // if specifed with the ES6 syntax \u1F400
  '[?-?]'
  //'[\u1F004-\u1F9C0]'
];


$('#mybtn').on('click', function() 
  removeInvalidChars();
);

function removeInvalidChars() 
  var str = $('#myinput').val();
  str = str.replace(new RegExp(ranges.join('|'), 'ug'), '');
  $("#myinput").val(str);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="myinput" />
<input type="submit" id="mybtn" value="clear" />

这里是my CodePen

不过有几点需要注意。

    U+1F000 以上的 Unicode 字符需要特殊符号,因此您可以使用 sandre89 的方式,或者选择 \u1F000 ES6 符号,这可能适用于您的缩小器,也可能不适用。我成功地将表情符号直接粘贴到 UTF-8 编码脚本中。

    不要忘记正则表达式中的 u 标志,否则您的 Javascript 引擎可能会抛出错误。

请注意,由于文件编码、字符集或缩小器,事情可能无法正常工作。在我的情况下,直到我将脚本从 .isml 文件(Demandware)中取出并将其粘贴到 .js 文件中之前,都没有任何效果。

您可以参考Wikipedia Emoji page 和How many bytes does one Unicode character take?,并像我一样修改Online Unicode converter,从而获得一些见解。

【讨论】:

【参考方案8】:
var emojiRegex = /\uD83C\uDFF4(?:\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74)\uDB40\uDC7F|\u200D\u2620\uFE0F)|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC68(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3]))|\uD83D\uDC69\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\uD83D\uDC68(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83D\uDC69\u200D[\u2695\u2696\u2708])\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC68(?:\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDD1-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDEEB\uDEEC\uDEF4-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC69\uDC6E\uDC70-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD26\uDD30-\uDD39\uDD3D\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDD1-\uDDDD])/g;
console.log(text.replace(emojiRegex,'');

【讨论】:

您可能想解释一下您提交的代码是什么以及如何工作的。 请解释这个答案,因为它已被标记为删除。我希望你能得到它的信任,所以请在这个片段中发布正在发生的事情【参考方案9】:
var emoji =/([#0-9]\u20E3)|[\xA9\xAE\u203C\u2047-\u2049\u2122\u2139\u3030\u303D\u3297\u3299][\uFE00-\uFEFF]?|[\u2190-\u21FF][\uFE00-\uFEFF]?|[\u2300-\u23FF][\uFE00-\uFEFF]?|[\u2460-\u24FF][\uFE00-\uFEFF]?|[\u25A0-\u25FF][\uFE00-\uFEFF]?|[\u2600-\u27BF][\uFE00-\uFEFF]?|[\u2900-\u297F][\uFE00-\uFEFF]?|[\u2B00-\u2BF0][\uFE00-\uFEFF]?|(?:\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDEFF])[\uFE00-\uFEFF]?|[\u20E3]|[\u26A0-\u3000]|\uD83E[\udd00-\uddff]|[\u00A0-\u269F]/g;

str.replace(emoji, "");

我添加了这个'\uD83E[\udd00-\uddff]'

这些表情符号于 2018 年 6 月更新

如果您想在其他更新后阻止表情符号,请使用此

str.replace(/[^0-9a-zA-Zㄱ-힣+×÷=%♤♡☆♧)(*&^/~#@!-:;,?`_|<>¥£€$◇■□●○•°※¤《》¡¿₩\[\]\"\' \\]/g ,"");

你可以屏蔽所有表情符号,你只能使用 eng、num、hangle 和一些字符 谢谢 :)

【讨论】:

请对您的答案进行解释,以便读者更好地理解。 这不支持任何语言。【参考方案10】:

您可以使用此功能将表情符号替换为空:

function msgAfterClearEmojis(msg)

    var new_msg = msg.replace(/([#0-9]\u20E3)|[\xA9\xAE\u203C\u2047-\u2049\u2122\u2139\u3030\u303D\u3297\u3299][\uFE00-\uFEFF]?|[\u2190-\u21FF][\uFE00-\uFEFF]?|[\u2300-\u23FF][\uFE00-\uFEFF]?|[\u2460-\u24FF][\uFE00-\uFEFF]?|[\u25A0-\u25FF][\uFE00-\uFEFF]?|[\u2600-\u27BF][\uFE00-\uFEFF]?|[\u2900-\u297F][\uFE00-\uFEFF]?|[\u2B00-\u2BF0][\uFE00-\uFEFF]?|(?:\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDEFF])[\uFE00-\uFEFF]?|[\u20E3]|[\u26A0-\u3000]|\uD83E[\udd00-\uddff]|[\u00A0-\u269F]/g, '').trim();
    return new_msg;

【讨论】:

【参考方案11】:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
function isEmoji(str) 
    var ranges = [       
       '[\uE000-\uF8FF]',
       '\uD83C[\uDC00-\uDFFF]',
       '\uD83D[\uDC00-\uDFFF]',
       '[\u2011-\u26FF]',
       '\uD83E[\uDD10-\uDDFF]'         
    ];
    if (str.match(ranges.join('|'))) 
        return true;
     else 
        return false;
    

$(document).ready(function()
 $('input').on('input',function()
    var $th = $(this);
    console.log("Value of Input"+$th.val());
    emojiInput= isEmoji($th.val());
    if (emojiInput==true) 
        $th.val("");
    
);
);
</script>
</head>
<body>
Enter your name: <input type="text">
</body>
</html>

【讨论】:

虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。如需更多帮助,请参阅how to answer。【参考方案12】:

我通过使用带有Unicode property escapes 的正则表达式解决了这个问题。我从这篇文章中得到它,它适用于 Java,但仍然非常有用 - Remove Emojis from a Java String。

'Smile?'.replace(/[^\pL\pN\pP\pZ^$\n]/gu, '');

它会删除所有符号,除了:

\pL - 任何语言的所有字母 \pN - 数字 \pP - 标点符号 \pZ - 空格分隔符 ^$\n - 添加任何你想保留的符号

这个应该更正确并且有效,但对我来说它在字符串中留下了一些垃圾符号:

    'Smile?'.replace(/\pEmoji/gu, '');

编辑:从 cmets 添加符号

【讨论】:

这很优雅 不幸的是,它删除了^$。应该是/[^\pL\pN\pP\pZ\^\$]/gu 工作正常,但禁用输入键。 /[^\pL\pN\pP\pZ\n]/gu - 这可以进入 垃圾符号是什么? 如果是复杂的表情符号。例如:'??‍?'.replace(/\pEmoji/gu, '').charCodeAt(0)【参考方案13】:

您可以在这里查看表情符号..

?  , ?  ,  ?

function removeEmoji() 
  var y = document.getElementById('textbox_id1');
  y.value = y.value.replace(/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g, '');
input 
  padding: 5px;
&lt;input type="text" id="textbox_id1" placeholder="Remove emoji..." oninput="removeEmoji()"&gt;

您可以从这里获取更多表情符号:Emoji Keyboard Online

【讨论】:

【参考方案14】:

这是@hababr 答案的迭代。 他的回答删除了许多标准字符,例如$+&lt; 等等。 这个版本保留了所有这些(除了\ 反斜杠 - 不知道如何正确转义它)

"hey? hau? ahoy?‍☠️ !@#$%^&*()-_=+±§;:'\|`~/?[],.<>".replace(/[^\pL\pN\pP\pZ^$=+±\\'|`\\~<>]/gu, "")
// "hey hau ahoy !@#$%^&*()-_=+±§;:'|`~/?[],.<>"

【讨论】:

【参考方案15】:

搜索并尝试了大量的unicode regex,我建议你试试这个,它可以覆盖所有的表情符号

function removeEmoji(str) 
  let strCopy = str;
  const emojiKeycapRegex = /[\u0023-\u0039]\ufe0f?\u20e3/g;
  const emojiRegex = /\pExtended_Pictographic/gu;
  const emojiComponentRegex = /\pEmoji_Component/gu;
  if (emojiKeycapRegex.test(strCopy)) 
    strCopy = strCopy.replace(emojiKeycapRegex, '');
  
  if (emojiRegex.test(strCopy)) 
    strCopy = strCopy.replace(emojiRegex, '');
  
  if (emojiComponentRegex.test(strCopy)) 
    // eslint-disable-next-line no-restricted-syntax
    for (const emoji of (strCopy.match(emojiComponentRegex) || [])) 
      if (/[\d|*|#]/.test(emoji)) 
        continue;
      
      strCopy = strCopy.replace(emoji, '');
    
  

  return strCopy;

let a = "1️⃣aa?‍♂️b#️⃣?✅❎23#!^*bb???‍♀️??ccc";
console.log(removeEmoji(a))

Refrence: Unicode Emoij Document

【讨论】:

【参考方案16】:

只是对@hababr 答案的补充。

如果您需要摆脱复杂的表情符号,您还必须删除额外的东西,例如修饰符等:

'??‍?'.replace(/[\pEmoji\pEmoji_Modifier\pEmoji_Component\pEmoji_Modifier_Base\pEmoji_Presentation]/gu, '').charCodeAt(0)

更新:

*#0-9 - 根据 Unicode 标准,默认情况下是带有文本表示的表情符号字符。

所以,我目前的解决方案是下一个:

'??‍?'.replace(/(?![*#0-9]+)[\pEmoji\pEmoji_Modifier\pEmoji_Component\pEmoji_Modifier_Base\pEmoji_Presentation]/gu, '').charCodeAt(0)

【讨论】:

以上是关于如何使用 javascript 删除表情符号代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 javascript 检测表情符号

php 如何删除WordPress表情符号代码

如何从字符串中删除表情符号字符?

如何从字符串PHP的开头删除⭕️和♛表情符号?

如何从数据框中删除表情符号?

php WP删除表情符号代码