這裡要利用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
沒有留言:
張貼留言