如何从字符串jquery / javascript过滤表情符号?

时间:2014-10-22 12:38:03

标签: javascript jquery instagram emoji

我正在使用以下内容从php中的字符串中排除表情符号/表情符号。我如何使用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的另一篇文章中找到了这个建议,但它没有用。它仍然允许来自ex ios的表情符号。

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

我强烈建议您阅读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字符,并将其替换为您希望放在那里的任何内容。这看起来像是一个通过字符串的简单循环的工作,而不是正则表达式。