寫了一個JS函數,判斷一段字串是IPv4,IPv6,或者都不是。
執行效率還是不錯的,迴圈搞定,用了點正則。
我感覺這樣的邏輯實現判斷,比用純正則可讀性,可維護性要好。
var validIPAddress = function(IP) { //按"."進行分割 var parts = IP.split("."); //IPv4由4個部分組成 if(parts.length === 4){ for(var i=0;i<parts.length;i++){ var cur = parts[i]; //Null 字元串或當前部分不是數字//那麼肯定不合法 if(!cur || isNaN(cur)){ return "Neither"; } //轉化為數字 var num = +cur; //合法範圍應該在0-255之間 if(num < 0 || num > 255){ return "Neither"; } //排除"172.016.254.01"這樣以0開頭的不合法情況 if(num + "" !== cur){ return "Neither"; } } return "IPv4"; } //合法的IPv6像這樣://"2001:0db8:85a3:0000:0000:8a2e:0370:7334"//以":"來分割 parts = IP.split(":"); //正則驗證是否有指定字元以外的字元存在 var reg = /[^0123456789abcdefABCDEF]/; //IPv6由8個部分組成 if(parts.length === 8){ for(i=0;i<parts.length;i++){ var cur = parts[i]; //如果是Null 字元串或者當前部分長度超標 if(!cur || cur.length > 4){ return "Neither"; } //如果包含非法字元 if(reg.test(cur)){ return "Neither"; } } return "IPv6"; } //不是合法的IP地址 return "Neither";};