1

为了检测网络中的所有 IP 127.0.0.1/8,我使用了这个常见的正则表达式:

/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/

工作已完成,但通过 es-lint 的 codacy 检测到此正则表达式不安全。

我已经阅读了这个博客,这个stackoverflow 问题,但是我对正则表达式并不流利,而且我不理解所有的解释。

我试图添加[^,\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

4

1 回答 1

1

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]?)$/

查看正则表达式演示

于 2018-08-21T10:01:05.753 回答