【问题标题】:How to filter emojis from string jquery/javascript?如何从字符串 jquery/javascript 中过滤表情符号?
【发布时间】:2014-10-22 12:38:03
【问题描述】:

我正在使用以下内容从 php.ini 中的字符串中排除表情符号/表情符号。如何使用 javascript 或 jQuery 做同样的事情?

preg_replace('/([0-9|#][\x{20E3}])|[\x{00ae}|\x{00a9}|\x{203C}|\x{2047}|\x{2048}|\x{2049}|\x{3030}|\x{303D}|\x{2139}|\x{2122}|\x{3297}|\x{3299}][\x{FE00}-\x{FEFF}]?|[\x{2190}-\x{21FF}][\x{FE00}-\x{FEFF}]?|[\x{2300}-\x{23FF}][\x{FE00}-\x{FEFF}]?|[\x{2460}-\x{24FF}][\x{FE00}-\x{FEFF}]?|[\x{25A0}-\x{25FF}][\x{FE00}-\x{FEFF}]?|[\x{2600}-\x{27BF}][\x{FE00}-\x{FEFF}]?|[\x{2900}-\x{297F}][\x{FE00}-\x{FEFF}]?|[\x{2B00}-\x{2BF0}][\x{FE00}-\x{FEFF}]?|[\x{1F000}-\x{1F6FF}][\x{FE00}-\x{FEFF}]?/u', '', $text);

这就是我尝试做的事情

$('#edit.popup .btn.save').live('click',function(e) {
var item_id = $(this).attr('id');
var edited_text = $('#edit.popup textarea').val().replace(/([0-9|#][\x{20E3}])|[\x{00ae}|\x{00a9}|\x{203C}|\x{2047}|\x{2048}|\x{2049}|\x{3030}|\x{303D}|\x{2139}|\x{2122}|\x{3297}|\x{3299}][\x{FE00}-\x{FEFF}]?|[\x{2190}-\x{21FF}][\x{FE00}-\x{FEFF}]?|[\x{2300}-\x{23FF}][\x{FE00}-\x{FEFF}]?|[\x{2460}-\x{24FF}][\x{FE00}-\x{FEFF}]?|[\x{25A0}-\x{25FF}][\x{FE00}-\x{FEFF}]?|[\x{2600}-\x{27BF}][\x{FE00}-\x{FEFF}]?|[\x{2900}-\x{297F}][\x{FE00}-\x{FEFF}]?|[\x{2B00}-\x{2BF0}][\x{FE00}-\x{FEFF}]?|[\x{1F000}-\x{1F6FF}][\x{FE00}-\x{FEFF}]?/u, '');

$('#grid li.image#' + item_id + ' img').attr('data-text', edited_text);

});

我在 Stack Overflow 上的另一篇文章中发现了这个建议,但它不起作用。它仍然允许来自前 ios 的表情符号。

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

我试图实现的是不允许在文本字段中使用表情符号,如果插入表情符号(从前 ios 键盘),它将被任何内容替换。它适用于 php。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 您使用的是什么版本的 jQuery? .live 在 1.7 中被弃用并在 1.9 中被删除。 (reference)
  • 我认为从文本字段中过滤表情符号通常是个坏主意,我们现在允许它们出现在所有东西中——文件名,你能想到的任何东西——如果在接下来的几十年里,他们开始出现真实的人名。

标签: javascript jquery instagram emoji


【解决方案1】:

基于answer from mb21,这个正则表达式完成了这项工作。无需循环!

/[\uD800-\uDBFF][\uDC00-\uDFFF]/g

【讨论】:

  • 用法:string = string.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,'');
【解决方案2】:

正如this answer 中所指出的,JavaScript 不支持基本多语言平面(iOS emojis 所在的位置)之外的 Unicode 代码点。

我强烈推荐阅读The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)。然后你就会明白是什么意思了:

所以需要一些间接的方法。参照。到JavaScript strings outside of the BMP

例如,您可以在[\uD800-\uDBFF](高代理)范围内查找代码点,当您找到时,检查字符串中的下一个代码点是否在[\uDC00-\uDFFF] 范围内(如果没有,则是一个严重的数据错误),将两者解释为 Unicode 字符,并用您希望放在那里的任何内容替换它们。这看起来像是通过字符串进行简单循环的工作,而不是正则表达式。

【讨论】:

  • Joel 2003 年的帖子是从 2003 年开始的。虽然如果使用 JS 以外的其他语言有扎实的基础知识,我只推荐这个:dmitripavlutin.com/…
猜你喜欢
  • 2014-04-06
  • 2015-03-17
  • 2019-01-19
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多