Неявные классы символов
Запрещает символы, созданные с помощью нескольких кодовых точек в синтаксисе класса символов
Использование конфигурации recommended из @eslint/js в файле конфигурации активирует это правило
Некоторые проблемы, обнаруженные этим правилом, можно вручную исправить с помощью предложений редактора
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();
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");
Когда не стоит использовать
Вы можете отключить это правило, если не хотите проверять синтаксис класса символов 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