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"
的字串值)包含原始控制字元(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 中引入。