Spec-Zone.ru › ESLint

Неявные классы символов

Запрещает символы, созданные с помощью нескольких кодовых точек в синтаксисе класса символов

✅ Рекомендуемое

Использование конфигурации recommended из @eslint/js в файле конфигурации активирует это правило

💡 hasSuggestions

Некоторые проблемы, обнаруженные этим правилом, можно вручную исправить с помощью предложений редактора

Unicode содержит символы, состоящие из нескольких кодовых точек. Синтаксис класса символов RegExp (/[abc]/) не может обрабатывать символы, состоящие из нескольких кодовых точек как единый символ; такие символы будут расщеплены на отдельные кодовые точки. Например, ❇️ состоит из ❇ (U+2747) и VARIATION SELECTOR-16 (U+FE0F). Если этот символ находится в классе символов RegExp, он будет соответствовать либо ❇ (U+2747) или VARIATION SELECTOR-16 (U+FE0F) вместо ❇️.

Это правило сообщает о регулярных выражениях, которые содержат символы из нескольких кодовых точек в синтаксисе класса символов. Это правило рассматривает следующие символы как символы из нескольких кодовых точек.

Символ с объединяющими символами:

Объединяющие символы — это символы, принадлежащие одному из Mc, Me, и Mn категорий Unicode.

/^[Á]$/u.test("Á"); //→ false
/^[❇️]$/u.test("❇️"); //→ false

Символ с модификаторами эмодзи:

/^[👶🏻]$/u.test("👶🏻"); //→ false
/^[👶🏽]$/u.test("👶🏽"); //→ false

Пара символов региональных индикаторов:

/^[🇯🇵]$/u.test("🇯🇵"); //→ false

Символы, объединённые с помощью ZWJ:

/^[👨‍👩‍👦]$/u.test("👨‍👩‍👦"); //→ false

Пара суррогатных символов без флага Unicode:

/^[👍]$/.test("👍"); //→ false

// Surrogate pair is OK if with u flag.
/^[👍]$/u.test("👍"); //→ true

Подробное описание правила

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

Примеры неправильного кода для этого правила:

Открыть в игровом поле
/*eslint no-misleading-character-class: error */

/^[Á]$/u;
/^[❇️]$/u;
/^[👶🏻]$/u;
/^[🇯🇵]$/u;
/^[👨‍👩‍👦]$/u;
/^[👍]$/;
new RegExp("[🎵]");

Примеры правильного кода для этого правила:

Открыть в игровом поле
/*eslint no-misleading-character-class: error */

/^[abc]$/;
/^[👍]$/u;
/^[\q{👶🏻}]$/v;
new RegExp("^[]$");
new RegExp(`[Á-${z}]`, "u"); // variable pattern

Параметры

Это правило имеет параметр типа объект:

  • "allowEscape": Если установлено значение true, правило разрешает любые группы кодовых точек внутри класса символов, если они записаны с использованием escape-последовательностей. Этот параметр действует только на литералы регулярных выражений и на регулярные выражения, созданные с помощью конструктора RegExp с литеральным аргументом в качестве шаблона.

allowEscape

Примеры неправильного кода для этого правила с параметром { "allowEscape": true }:

Открыть в игровом поле
/* eslint no-misleading-character-class: ["error", { "allowEscape": true }] */

/[\👍]/; // backslash can be omitted

new RegExp("[\ud83d" + "\udc4d]");

const pattern = "[\ud83d\udc4d]";
new RegExp(pattern);

Примеры правильного кода для этого правила с параметром { "allowEscape": true }:

Открыть в игровом поле
/* eslint no-misleading-character-class: ["error", { "allowEscape": true }] */

/[\ud83d\udc4d]/;
/[\u00B7\u0300-\u036F]/u;
/[👨\u200d👩]/u;
new RegExp("[\x41\u0301]");
new RegExp(`[\u{1F1EF}\u{1F1F5}]`, "u");
new RegExp("[\\u{1F1EF}\\u{1F1F5}]", "u");

Когда не стоит использовать

Вы можете отключить это правило, если не хотите проверять синтаксис класса символов RegExp на наличие символов из нескольких кодовых точек.

Версия

Это правило было добавлено в ESLint v5.3.0.

Ссылки

  • Исходный код правила
  • Тесты

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-misleading-character-class

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API