用正規表達式檢查IP
前言
在先前的 在 JavaScript 初探正規表達式 裡基本的使用了正規表達式,這次練習用正規表達式來檢查IP,在此把學習的過程做個紀錄。
內容
範例如下
const reg0_9 = /^(\d)$/; const reg0_99 = /^(\d|[1-9]\d)$/; const reg0_999 = /^(\d|[1-9]\d|[1-9]\d\d)$/; const reg0_255 = /^(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))$/; let num = '256'; console.log( `reg0-9:${reg0_9.test(num)}` );// console.log( `reg0-99:${reg0_99.test(num)}` );// console.log( `reg0-999:${reg0_999.test(num)}` );// console.log( `reg0-255:${reg0_255.test(num)}` );// const regIP4 = /^((\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.){4}$/; let ipStr = '0.255.255.255.'; console.log( `regIP4:${regIP4.test(ipStr)}` );//
要檢查IP的字串前要先學會如何檢查數字字串,範例先示範檢查 0 ~ 9 ,這裡要注意字首與字尾的寫法,如果只寫"\d",就無法檢查只有一個數字,而會變成裡面只要有數字,接著檢查 0 ~ 99 ,不幸的寫法不是"\d\d",因為像"01"這樣的寫法會過關,所以透過"|"的寫法配合,當位數只有1位數,就使用"\d",兩位數的時候就"[1-9]\d",這是檢查 10 ~ 99 ,接著示範 0 ~ 999 ,邏輯跟 0 ~ 99 的時候差不多,但要多加 100 ~ 999 的檢查,接著重點來了,如何檢查 0 ~ 255 呢? 要多檢查 100 ~ 199 ,透過"1\d\d",那 200 ~ 255 呢?這裡要把 200 ~ 249 與 250 ~255 隔開,所以寫法變成"2([0-4]\d|5[0-5])"。
在學會了如何檢查 0 ~ 255 ,接著就可以檢查 IP , IP 字串可以想像成 (0_255).(0_255).(0_255).(0_255) ,範例透過與語法連續檢查 4 次,但要注意這個方法檢查時, IP 的字尾要多加".",這是為了讓正規表達式看起來簡潔。
參考資料
[ www.itread01.com ] 效率最快的 IPv4 和 IPv6 正則表示式