版本

no-control-regex

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

推荐

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

控制字符是 ASCII 范围 0-31 中的特殊不可见字符。这些字符很少用于 JavaScript 字符串,因此包含显式匹配这些字符的元素的正则表达式很可能是一个错误。

规则详细信息

此规则禁止在正则表达式中使用控制字符和一些匹配控制字符的转义序列。

以下正则表达式模式元素被认为是打字时可能出现的错误,因此被此规则禁止

  • \x00\x1F 的十六进制字符转义。
  • \u0000\u001F 的 Unicode 字符转义。
  • \u{0}\u{1F} 的 Unicode 代码点转义。
  • 从 U+0000 到 U+001F 的未转义原始字符。

此规则允许诸如 \t\n 之类的控制转义。

此规则的 错误 代码示例

在游乐场中打开
/*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

此规则的 正确 代码示例

在游乐场中打开
/*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" 的字符串值)包含一个原始控制字符(制表符字符)。

/*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") 之间没有行为差异,并且在这两种情况下都清楚地表明了匹配制表符字符的意图。它们对于此规则的目的同样有效,但它只允许 new RegExp("\\t")

何时不使用它

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

版本

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

资源

更改语言