2014-10-22 2 views
1

Я использую следующее, чтобы исключить emojis/emoticons из строки в php. Как мне сделать то же самое с javascript или jQuery?Как фильтровать emojis из строки jquery/javascript?

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

});

Я нашел это предложение в другом сообщении о переполнении стека, но оно не работает. Это все еще позволяет emojis от ex ios.

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

То, что я пытаюсь добиться того, чтобы не допустить смайлики в текстовом поле, и если смайлики вставлены (от экс Ios клавиатуры) она будет заменена ничем. Он работает с php. Кто-то здесь, кто может мне помочь?

+0

Какую версию jQuery вы используете? '.live' устарел в 1.7 и удален в 1.9. [(Ссылка)] (http://api.jquery.com/live/) – Stryner

ответ

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] (если нет, есть серьезные ошибка данных), интерпретируйте их как символ Юникода и замените их тем, что вы хотите поместить там. Это выглядит как задание для простого цикла через строку, а не регулярное выражение.