我正在使用以下内容从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。有谁可以帮我解决这个问题?
答案 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字符,并将其替换为您希望放在那里的任何内容。这看起来像是一个通过字符串的简单循环的工作,而不是正则表达式。