字符串而不是正则表达式¶
ID: js/string-instead-of-regex
Kind: problem
Security severity:
Severity: warning
Precision: high
Tags:
- correctness
Query suites:
- javascript-security-and-quality.qls
使用字符串作为第一个参数调用内置方法String.prototype.split
和 String.prototype.replace
会使这些方法搜索该确切的字符串。提供正则表达式而不是字符串会使这些方法执行正则表达式搜索。
使用具有正则表达式格式的字符串调用这些方法可能是一个错误,因为这些方法不会将字符串转换为正则表达式。
建议¶
调用String.prototype.split
和 String.prototype.replace
时,除非需要精确搜索,否则使用正则表达式作为第一个参数。
示例¶
以下代码片段显示了对String.prototype.replace
的调用。该调用的目的是删除所有非字母数字字符。
var cleaned = input.replace("[^a-zA-Z0-9]+", "");
不幸的是,第一个参数是字符串而不是正则表达式,因此该调用只会删除第一个正好为“[^a-zA-Z0-9]+
”的子字符串。
相反,第一个参数应该是具有global
标志设置的正则表达式。
var cleaned = input.replace(/[^a-zA-Z0-9]+/g, "");
参考¶
Mozilla 开发者网络:String.prototype.split
Mozilla 开发者网络:String.prototype.replace