如何将我的正则表达式检测 127.0.0.1/8 IP 转换为更安全的 IP?

How to transform my regular expression detecting 127.0.0.1/8 IP to a safer one?

为了检测 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, this ,但我对正则表达式不是很流利,而且我不理解所有的解释。

我尝试在很多位置添加[^,\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 产生警告是因为您的正则表达式包含一个量化组,其中包含交替运算符和量词。实际上,由于限制量词仅 "repeats" 模式的三次,该模式是相当安全的,但 Eslint 无法推断出这一点。

要消除警告,unwrap/unroll 量化组(=重复 . + 八位字节模式三次):

/^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