由于项目的需求,需要过滤掉内网IP地址。首先我们需要知道内网网段范围(内网保留地址),然后根据其规则,使用正则表达式针对性去匹配。
内网保留地址
Internet设计者保留了IPv4地址空间的一部份供专用地址使用,专用地址空间中的IPv4地址叫专用地址,这些地址永远不会被当做公用地址来分配,所以专用地址永远不会与公用地址重复.
IPv4专用地址如下:
IP等级 IP位置
Class A 10.0.0.0-10.255.255.255
默认子网掩码:255.0.0.0
Class B 172.16.0.0-172.31.255.255
默认子网掩码:255.240.0.0
Class C 192.168.0.0-192.168.255.255
默认子网掩码:255.255.0.0
内网是可以上网的.内网需要一台服务器或路由器做网关,通过它来上网
做网关的服务器有一个网关(服务器/路由器)的IP地址,其它内网电脑的IP可根据它来随意设置,前提是IP前三个数要跟它一样,第四个可从0-255中任选但要跟服务器的IP不同
正则匹配
A 类网段
1
| /^10\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])$/
|
B类网段
1
| /^172\.(1[6789]|2[0-9]|3[01])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])$/
|
C类网段
1
| /^192\.168\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])$/
|
全匹配
1
| /^(127\.0\.0\.1)|(localhost)|(10\.\d{1,3}\.\d{1,3}\.\d{1,3})|(172\.((1[6-9])|(2\d)|(3[01]))\.\d{1,3}\.\d{1,3})|(192\.168\.\d{1,3}\.\d{1,3})$/
|
全匹配测试用例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const reg = /^(127\.0\.0\.1)|(localhost)|(10\.\d{1,3}\.\d{1,3}\.\d{1,3})|(172\.((1[6-9])|(2\d)|(3[01]))\.\d{1,3}\.\d{1,3})|(192\.168\.\d{1,3}\.\d{1,3})$/
reg.test('localhost') reg.test('127.0.0.1') reg.test('10.0.0.0') reg.test('10.255.255.255') reg.test('172.16.0.0') reg.test('172.31.255.255') reg.test('192.168.0.0') reg.test('192.168.255.255')
reg.test('192.168.255.256') reg.test('192.169.255.256') reg.test('172.32.255.255') reg.test('172.15.255.255') reg.test('9.0.0.0') reg.test('11.0.0.0')
|
拓展
正则匹配IP地址
1 2
| const reg = /^([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.([0-9]|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$/ reg.test('255.255.255.255')
|