为了检测 127.0.0.1/8
网络中的所有 IP,我使用了这个通用的正则表达式:
/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
工作已完成,但通过 es-lint 的 codacy 检测到此正则表达式不安全。
我已经读过这个 blog , 这个stackoverflow question ,但我对正则表达式并不流利,而且我不理解所有解释。
我尝试在很多位置添加 [^,\r\n]
但它不起作用。
这是一个测试正则表达式的工具:https://regex101.com/r/YbYrcd/1
这是我的 javascript 代码被 eslint 检测为不安全的正则表达式:
window.location.hostname.match(
/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
)
如何将上面的正则表达式转换为更安全的符合eslint
的正则表达式?
最佳答案
Eslint 会产生警告,因为您的正则表达式包含一个量化组,其中包含交替运算符和量词。实际上,由于限制量词仅“重复”该模式三次,因此该模式相当安全,但 Eslint 无法推断出这一点。
要消除警告,展开/展开量化组(=重复 .
+ 八位位组模式三次):
/^127\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
参见 regex demo
关于javascript - 如何将我的正则表达式检测 127.0.0.1/8 IP 转换为更安全的 IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51945433/