Spec-Zone.ru › ESLint

no-misleading-character-class

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

✅ Рекомендуется

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

💡 hasSuggestions

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

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

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

Символ с комбинируемыми знаками:

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

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

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

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

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

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

Символы, объединяемые ZWJ:

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

Суррогатная пара без флага Юникода:

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

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

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

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

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

Открыть в Playground
/*eslint no-misleading-character-class: error */

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

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

Открыть в Playground
/*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 }:

Открыть в Playground
/* 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 }:

Открыть в Playground
/* 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");

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

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

Версия

Это правило появилось в 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