我正在尝试测试以下 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])|$)$
正则表达式应该检查从 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)
关于javascript - 使用正则表达式测试 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46222290/