版本

no-control-regex

禁止在正则表达式中使用控制字符

推荐

配置文件 中使用来自 @eslint/jsrecommended 配置启用此规则

控制字符是在 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"*/

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

此规则的正确代码示例

在 Playground 中打开
/*eslint no-control-regex: "error"*/

const pattern1 = /\x20/;
const pattern2 = /\u0020/;
const pattern3 = /\u{20}/u;
const pattern4 = /\t/;
const pattern5 = /\n/;
const pattern6 = new RegExp("\x20");
const pattern7 = new RegExp("\\t");
const 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")

何时不使用

如果您需要使用控制字符模式匹配,则应关闭此规则。

版本

此规则在 ESLint v0.1.0 中引入。

资源

更改语言