正则表达式验证合法的IP地址

IPv4地址

最初设计互联网络时,为了便于寻址和层次化构造网络,每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上的工作站,服务器和路由器等)有一个主机ID与其对应。Internet委员会定义了5种IP地址类型以适应不同容量的网络,即A类~E类。

类别IP地址范围最大网络数最大主机数私有IP地址范围
A0.0.0.0~127.255.255.255126(2^7 - 2)(A类地址的前缀为"0",网络ID标识码的位数为8位,网络号不能全为0且127.0.0.0网络保留用于回路测试,所以最大网络数为2^7-2)16777214(2^24 - 2 )10.0.0.0~10.255.255.255
B128.0.0.0~191.255.255.25516384(2^14) (B类地址的前缀为"10",网络ID标识码的位数为16位,因此最大网络数为(2^14))65534(2^16 - 2)172.16.0.0~172.31.255.255
C192.0.0.0~223.255.255.2552097152(2^21)(C类地址的前缀为"110",网络ID标志码的位数为24位,因此最大网络数为(2^21))254(2^8 - 2)192.168.0.0~192.168.255.255
D224.0.0.0~239.255.255.255D类地址的前缀为"1110"  
E240.0.0.0~255.255.255.255E类地址的前缀为"1111"  

IPv4地址由4组数字组成,每组数字之间以.分隔,每组数字的取值范围是0~255.

IPv4必须满足以下四条规则:

  1. 任何一个1位或者两位数字,即0~99;
  2. 任何一个以1开头的3位数字,即100~199;
  3. 任何一个以2开头,第二位数字在0~4之间的数字即200~249;
  4. 任何一个以25开头,第三位数字在0~5之间的三位数字,即250~255;

首先满足第一条规则的正则是:

((\d{1,2})

满足第二条规则的正则是:

(1\d{1,2})

满足第三条规则的正则是:

(2[0-4]\d)

满足第四条规则的正则是:

(25[0-5])

将其组合起来就能得到一个能匹配0~255的正则表达式了:

((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))

IPv4地址由4个这样的数字组成,中间用"."隔开,所以可以匹配IPv4的正则表达式为:

(((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))

使用边界匹配,不然256.1.1.1也会匹配成功,会匹配成56.1.1.1,那么最终正确的匹配IPv4的正则表达式为:

(?=(\b|\D))(((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{1,2})|(2[0-4]\d)|(25[0-5]))(?=(\b|\D))
 IPv6地址

IPv6的128位地址通常写成8组,每4组为4个十六进制数。比如:AD80:0000:0000:0000:ABAA:0000:00C2:0002 是一个合法的IPv6地址。这个地址比较长,看起来不方便也不易于书写。零压缩法可以用来缩减其长度。如果几个连续段位的值都是0,那么这些0就可以简单的一::来表示,上述地址就可以写成AD80::ABAA:0000:00C2:0002.这里需要注意的是只能简化连续的段位的0,其前后的0都要保留,比如AD80的最后的这个0,不能被简化。当然也可以在ABAA后面使用::,这样的话前面的12个0就不能压缩了。这个限制的目的是为了能准确的还原被压缩的0,不然就无法确定每个::代表多少个0.

支持IPv6基本格式的正则表达式:

^([\\da-fA-F]{1,4}:){7}([\\da-fA-F]{1,4})$

转载于:https://www.cnblogs.com/fangpengchengbupter/p/7929188.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值