no-control-regex
禁止正则表达式中的控制字符
✅ 推荐
在配置文件中使用来自 @eslint/js
的 recommended
配置会启用此规则
控制字符是 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 = ;
var pattern2 = ;
var pattern3 = ;
var pattern4 = ;
var pattern5 = ;
var pattern6 = new RegExp(); // raw U+000C character in the pattern
var pattern7 = new RegExp(); // \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 中引入的。