1

我有一个子例程,需要根据地址是 IPV4 还是 IPV6 执行 2 个不同的操作。如果我只是模式匹配 ':' 来确定地址是否为 IPV6 ?

有什么例外吗?

例如: 1.1.1.1 没有冒号 1::1 有:

以上也适用于子网:例如:1.2.3.4/24 2002::1.2.3.4/120

我不想对 IPV4 或 IPV6 使用巨大的正则表达式模式匹配。谢谢。

4

2 回答 2

0

如果你想要一个完整的 IPV6 匹配,那么这里有一个完整的正则 表达式

于 2013-07-12T19:00:42.807 回答
0

简而言之,如果输入中的冒号数 >=2,则认为它是 IPv6。


我遇到了同样的问题,输入可以是 IPv4 或 IPv6 或主机名,并且在每种情况下都可以选择端口。根据输入,需要使用适当的正则表达式对其进行验证。

我考虑的方法是计算输入中的冒号数。如果colonCount >= 2=> IPv6,否则为 IPv4 或主机名。[如果端口存在于和之间, IPv6 稍后会根据端口的存在性进行提取]:。对于 v4/host,只需用:. 剩余的字符串是纯 IP 地址 (v4/v6) 或主机名,可以使用适当的正则表达式进行评估。

于 2020-10-15T13:23:47.713 回答