Spec-Zone.ru › ESLint

no-control-regex

Запретить управляющие символы в регулярных выражениях

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

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

Управляющие символы — это специальные, невидимые символы в ASCII-диапазоне 0-31. Эти символы редко используются в строках JavaScript, поэтому регулярное выражение, явно сопоставляющее эти символы, скорее всего, является ошибкой.

Подробности проверки

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

Следующие элементы шаблонов регулярных выражений считаются возможными ошибками ввода и поэтому запрещены этой проверкой:

  • Шестнадцатеричные экранированные символы от \x00 до \x1F.
  • Экранированные символы Unicode от \u0000 до \u001F.
  • Экранированные коды Unicode от \u{0} до \u{1F}.
  • Неэкранированные символы от U+0000 до U+001F.

Экранированные управляющие символы, такие как \t и \n разрешены этой проверкой.

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

Открыть в Playground
/*eslint no-control-regex: "error"*/

var pattern1 = /\x00/;
var pattern2 = /\x0C/;
var pattern3 = /\x1F/;
var pattern4 = /\u000C/;
var pattern5 = /\u{C}/u;
var pattern6 = new RegExp("\x0C"); // raw U+000C character in the pattern
var pattern7 = new RegExp("\\x0C"); // \x0C pattern

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

Открыть в Playground
/*eslint no-control-regex: "error"*/

var pattern1 = /\x20/;
var pattern2 = /\u0020/;
var pattern3 = /\u{20}/u;
var pattern4 = /\t/;
var pattern5 = /\n/;
var pattern6 = new RegExp("\x20");
var pattern7 = new RegExp("\\t");
var pattern8 = new RegExp("\\n");

Известные ограничения

При проверке вызовов конструктора RegExp, эта проверка анализирует обработанные шаблоны регулярных выражений. Поэтому, хотя эта проверка предназначена для допуска синтаксиса, такого как \t, она не допускает new RegExp("\t"), так как обработанный шаблон (строковое значение "\t") содержит неэкранированный управляющий символ (символ TAB).

/*eslint no-control-regex: "error"*/

new RegExp("\t"); // disallowed since the pattern is: <TAB>

new RegExp("\\t"); // allowed since the pattern is: \t

Нет разницы в поведении между new RegExp("\t") и new RegExp("\\t"), и намерение сопоставить символ TAB очевидно в обоих случаях. Они одинаково допустимы для целей этой проверки, но она допускает только new RegExp("\\t").

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

Если вам необходимо использовать сопоставление шаблонов управляющих символов, отключите эту проверку.

Связанные правила

  • no-div-regex
  • no-regex-spaces

Версия

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

Ресурсы

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

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

Spec-Zone.ru

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