no-misleading-character-class
Запрещает символы, состоящие из нескольких кодовых точек, в синтаксисе классов символов
Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило
Некоторые проблемы, о которых сообщает это правило, можно исправить вручную с помощью предложений редактора
Юникод включает символы, состоящие из нескольких кодовых точек. Синтаксис классов символов регулярных выражений (/[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
Подробности правила
Это правило сообщает о регулярных выражениях, содержащих символы из нескольких кодовых точек в синтаксисе классов символов.
Примеры неправильного кода для этого правила:
/*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();
const pattern = "[\ud83d\udc4d]";
new RegExp();
Примеры правильного кода для этого правила с параметром { "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");
Когда не следует использовать это правило
Вы можете отключить это правило, если не хотите проверять синтаксис классов символов регулярных выражений на наличие символов из нескольких кодовых точек.
Версия
Это правило появилось в ESLint v5.3.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-misleading-character-class