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

标签 javascript regex eslint codacy

为了检测 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/

相关文章:

java - 正则表达式和反斜杠

python - 如何使用正则表达式python提取多行文本

reactjs - React 类方法未定义 no-undef

javascript - 滚动后如何从导航栏中删除一个元素?

Python Regex MULTILINE 选项无法正常工作?

javascript - 将 radio 设置为未选中

javascript - 如何设置 useEffect 在第一次使用 eslint-react-hooks 渲染时从 API 获取数据?

javascript - 我如何在当前 JavaScript 片段中使用 'return this' 来满足调用者的链接而不破坏我的 ESLint 规则?

javascript - Mobx 强制更新计算值

javascript - 按钮在 Chrome 和 Firefox 上的行为有所不同