Подтвердить что ты не робот

Удаление символов пробела нулевой ширины из строки JavaScript

Я беру пользовательский ввод (код JS) и выполняю (обрабатываю) их в реальном времени, чтобы показать какой-то вывод.

Иногда код имеет пространство с нулевой шириной, это действительно странно. я не знаю, как пользователи вводят это. Пример - " (​$".length === 3

Мне нужно иметь возможность удалить этот символ из моего кода в JS. Как мне это сделать? или, может быть, есть какой-то другой способ выполнить этот код JS, чтобы браузер не учитывал символы пробела нулевой ширины?

4b9b3361

Ответ 1

Юникод имеет следующие символы нулевой ширины:

  • пространство с нулевой шириной U + 200B
  • U + 200C нулевая ширина без участия Unicode code point
  • U + 200D столяр с нулевой шириной Unicode code point
  • U + FEFF нулевая ширина без пробелов Кодовая точка Unicode

Чтобы удалить их из строки в JavaScript, вы можете использовать простое регулярное выражение:

var userInput = 'a\u200Bb\u200Cc\u200Dd\uFEFFe';
console.log(userInput.length); // 9
var result = userInput.replace(/[\u200B-\u200D\uFEFF]/g, '');
console.log(result.length); // 5

Обратите внимание, что есть еще много символов, которые могут быть не видны. Например, некоторые из символов управления ASCII.

Ответ 2

У меня возникла проблема: некоторые невидимые символы повредили мой JSON и вызвали исключение Unexpected Token ILLEGAL, которое приводило к сбою моего сайта.

Вот мое решение с использованием переменной RegExp:

    var re = new RegExp("\u2028|\u2029");
    var result = text.replace(re, '');

Подробнее о Javascript и пробелах нулевой ширины вы можете найти здесь: Пробелы нулевой ширины

Ответ 3

str.replace(/\u200B/g,'');

200B является шестнадцатеричным из пространства нулевой ширины 8203. замените его на пустую строку, чтобы удалить этот

Ответ 4

[].filter.call( str, function( c ) {
    return c.charCodeAt( 0 ) !== 8203;
} );

Отфильтруйте каждый символ, чтобы удалить код 8203 char (номер Юникода с нулевой шириной).