Squeak.ru - шаблоны программирования

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

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

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

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

03.07.2012

  • Как вы пришли к выводу, что существует символ нулевой ширины? Только от длины? Длина символа, отличного от BMP, равна 2. 03.07.2012
  • когда я иду к концу строки и нажимаю стрелку влево, в какой-то момент она не перемещается влево, пока дважды не нажму клавишу со стрелкой влево. я так сделал вывод. 03.07.2012
  • Затем вам нужно проанализировать символы, например. путем записи цифровых кодов. Данные могут содержать объединяющие метки, так что два или более символа рассматриваются как единое целое при перемещении влево. 03.07.2012

Ответы:


1

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

  • U+200B пространство нулевой ширины
  • U + 200C кодовая точка Unicode без объединения нулевой ширины
  • U+200D кодовая точка Unicode для столяра нулевой ширины
  • 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.

03.07.2012
  • @Iván Castellanos упомянул некоторые другие символы, которые можно использовать для этого: U+200E LEFT-TO -ПРАВАЯ МЕТКА и U+200F СПРАВА НАЛЕВО МЕТКА. Как я уже сказал, могут быть и другие символы, которые сами по себе строго не видны. 08.07.2013
  • Как определить, действительно ли эти значения существуют на странице после загрузки DOM? Спасибо! 18.07.2014
  • var HTMLe=document.getElementsByTagName('html')[0]; HTMLe.outerHTML = HTMLe.outerHTML.replace(/[\u200B-\u200D\uFEFF\u200E\u200F]/g, ''); ... вот как 16.05.2017
  • Это не работает, если строка представляет собой строку символов Юникода - она ​​выдаст ошибку только для создания с ними переменной var s = "\ud83d\ude0d\ud83d\ude0d\ud83d\ude0d\ud83d\ude0d\ud83d\ude0d‌​\ud83d\ude0d\ud83d\u‌​de0d\ud83d\ude0d\ud8‌​3d\ude0d\ud83d\ude18‌​\ud83d\ude18\ud83d\u‌​de18" ‹-- содержит фактические ‌ и d 05.12.2017

  • 2

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

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

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

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

    19.10.2014
  • Символ или, вероятно, будет медленнее (в IE), поскольку он оптимизирован для многосимвольных совпадений. Но с Google V8, кто знает, он, вероятно, работает так же быстро. 18.05.2017
  • Эти невидимые символы юникода нулевой ширины можно использовать, чтобы скрыть учетные данные метаданных для тех пользователей, которые осмеливаются копировать и вставлять через браузер в другой редактор, который знает, как получить сообщение и преобразовать метаданные нулевой ширины обратно в отсутствие символов. Итак, что происходит, вы копируете и вставляете слово привет, и передается h, затем строка учетных данных метаданных, затем i. Но источник и место назначения просто показывают слово hi. Будет непросто удержать этих варваров нулевой ширины и их персидских посланников у спартанского рва. Грустный! 30.07.2018

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

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

    03.07.2012
  • Это умное решение, используя современный JavaScript, его можно сократить до этой однострочной строки: [].filter.call(strVal, c => c.charCodeAt() !== 8203).join('') 12.01.2019

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

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

    26.07.2016
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...