JavaScript判断有效的IP地址

写了一个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];
            //空字符串或当前部分不是数字
			//那么肯定不合法
            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];
            
			//如果是空字符串或者当前部分长度超标
            if(!cur || cur.length > 4){
                return "Neither";
            }
            
			//如果包含非法字符
            if(reg.test(cur)){
                return "Neither";
            }
        }
        
        return "IPv6";
    }
    
	//不是合法的IP地址
    return "Neither";
};

猜你喜欢

转载自blog.csdn.net/esir82/article/details/79392499
今日推荐