判断是否是有效的IPV4地址

参考链接:

https://blogs.msdn.microsoft.com/oldnewthing/20060522-08/?p=31113

http://www.cnblogs.com/txw1958/archive/2011/10/13/2210114.html

自己总结下:

(1) 正则表达式表示

首先,需要了解IP地址的基本格式。

IP地址的长度是32位,点分十进制表示分为4段,每段的范围是0~255. 例如:113.225.167.23   考虑每段的情况 有效的数字可以分为以下几种

1、一位数字 (0~9)

2、两位数字 (10~99)

3、三位数字

(1) “1” 开头  (100~199)

(2) "2"开头 (200~249  250~255)

对应正则表达式匹配如下:

数值范围      正则表达式匹配

0~9          \d

10~99        [1-9]\d

100~199      1\d\d

200~249      2[0-4]\d

250~255      25[0-5]

整合下:

/^\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]$/

由于任何以非零数字开头的数字 是有效的 上述表达式中头2部分可以合并

/^[1-9]?\d|1\d\d|2[0-4]\d|25[0-5]$/

那么可以得出完整的IPV4表示方法了

/^([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])$/

这种 表示方法可能并不准确。因为有些解析器会接收前导0,比如解析127.0.0.001和127.0.0.1是一样的。而有的解析器会把前导0当做8进制前缀

更改下上述表达式:

/^0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.0*([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])$/

当再次看到这表达式分析时,可能需要很久才能明白它的意思。

正则表达式擅长的是文本匹配,并不会进行数学运算。

更好的一种实现方式是使用JS代码来实现 

function isDottedIPv4(s)
{
var match = s.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/);
return match != null &&
match[1] <= 255 && match[2] <= 255 &&
match[3] <= 255 && match[4] <= 255;
}

  


上一篇:day 10 函数名的运用,闭包,迭代器


下一篇:python 函数名 、闭包 装饰器 day13