javascript - 使用正则表达式测试 IP 地址

标签 javascript regex

我正在尝试测试以下 IP 地址字符串的有效性,例如:

1.1.1.1/8
15.10.30.100/16
100.10.10.44/24
198.30.20.30/32

我有以下正则表达式来测试 ip 的每一项是否:

 !/^(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]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]\/\/(/^\d+)/ig?)$/.test(item.trim())

但我不确定正斜杠后跟数字的部分如何,例如 /24/32... 这是 \/\/(/^\d+)/ig。有人能指出我在这里做错了什么吗?

最佳答案

我没有检查你的正则表达式中的错误,但我这里有一个有效的错误

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

Test it here

正则表达式应该检查从 0 到 32 的分配 block 以及没有它的 IP4。

如果您想检查特定的分配 block ,您应该使用这个

(?:(?:25[0-5]|[0-2]?[0-4]?[0-9]|[0-1]?[0-9]?[0-9])\.){3}(?:(?:25[0-5]|[0-2]?[0-4]?[0-9]|[0-1]?[0-9]?[0-9]))(?:\/(?:8|16|24|32)|$)

并过滤最后一个嵌套非捕获组内的 block (?:8|16|24|32)

Test it here

关于javascript - 使用正则表达式测试 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46222290/

相关文章:

javascript - 关闭元素之间的 margin 差距

java - 在 Java 中使用正则表达式拆分具有转义序列的字符串

javascript - 将值添加到数组中的对象

javascript - Quasar Cordova Google map 插件

javascript - 需要检查对象 javascript 中是否存在两个键中的任何一个

regex - "smart"(宽容)日期解析器?

javascript - 正则表达式将行与转义的换行符匹配

javascript - 如何使用 haml 将内插的 ruby​​ 对象正确格式化为 Rails 中的 jquery 选择器?

javascript - 使用正则表达式将 $(5.20) 转换为 -5.20

javascript - 如何替换不在 id ="*"中的字符串?