2016年6月17日 星期五

Regex:檢驗合法的IP Address

這裡要利用regular expression來判定是否為合法IP Address
IP range :0.0.0.0  ~ 255.255.255.255

(1.)最簡單的:
^[0-9]+\.[0-9]+\.[0-9]\.[0-9]$

(2.) 將[0-9]代換成\d:
^\d+\.\d+\.\d+\.\d+$

(3.) 將前三個\d+\.化簡:
 ^(\d+\.){3}\d+$

以上大致是能符合ip address 的pattern

不過這裡用\d+規則上有點太寬鬆了,不論是999,1234,都能符合,甚至是000 , 001這種存有前導0的
別忘了合法範圍是在0~255

我們把0~255切成5個case
0~9 :[0-9]
10~99 : [1-9][0-9]
100~199 : 1[0-9]{2}
200~249 : 2[0-4][0-9]
250~255 : 25[0-5]

所以本來\d+ 就被取代成 ([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]),將它帶回第(3)個式子裡

所以最終的Pattern就變成:
 ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$

想一想:(以下的regex跟上面的差異在哪裡呢??)
^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

參考資料:  Matching IPv4 Addresses
                   Check for IP validity
                   www.regextester.com/22

沒有留言:

張貼留言