正则匹配内网IP V4地址

Xin下班买菜
碰到一个豁免内网地址的需求,策略要求仅对公网地址做安全判定,于是写个正则,正好也能水一篇。

内网地址范围如下:

上述网段有的只需要判断a,有的需要同时判断a和b但无一例外,后面都有一个割用的句点,所以正则表达式中可以借助句点来限定结束位置。


先按网段分开看各个网段的匹配正则:

ipv4地址形如 a.b.c.d,其中:a的取值范为1-255(其中224-239, 240-255在正常情况下不会碰到,既可以按1-255来理解,也可以按1-223来理解b, c, d的取值范围为0-255。

最终合并起来就是 ^(10|127|172\.(1[6-9]|2\d|3[01])|192\.168|)\.

这个正则并不会验证所匹配的内容是否为IP地址,因为在使用时一般会先获取到客户端IP,然后才对这个IP进行豁免判定,所以并不需要重复确认一下目标是否为IP。