区分IPv4和IPV6正则表达式 - 匹配:足够吗?

时间:2013-07-12 18:56:35

标签: regex ipv6 ipv4 colon

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

有没有例外?

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

以上的子网工作也是如此: 例如:1.2.3.4/24      2002 :: 1.2.3.4/120

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

简而言之,如果输入中冒号的数量> = 2,则将其视为IPv6。


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

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