判斷是否是有效的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;
}

  





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM