校验ip地址

66 阅读2分钟

前言

昨天面外包,面试官让我写校验IP地址,不知道ip6的写ip4的校验就行,我当时都忘记ip地址每一位的范围,面试官都怀疑我是不是计算机专业的

校验ip4

"172.16.254.1"

  • 根据.分割字符串;
  • 判断每一项的长度是否大于3或者小于1
  • 判断每一项的字符都在0123456789
  • 判断每一项小于255
  • 判断0后面有内容
let validIpAddress = (ip)=>{
    let arr = ip.split('.');
    let str = '0123456789';
    
    for(let i =0;i<arr.length;i++){
        let cur = arr[i];
        if(cur.length>3||cur.length<1)return false;
        if(!cur.every(v=>str.indexOf(v)>-1)) return false;
        if(Number(cur)<0 ||Number(cur)>255  )return false;
        if(cur.slice(0,1)=='0'&& cur.length>1)return false  //01.01.01.01
        
    
    }
    return true;
    


}

校验ip6

"2001:0db8:85a3:0000:0000:8a2e:0370:7334"

  • 根据:分割字符串;
  • 判断每一项的长度是否大于4或者小于1
  • 判断每一项的字符都在0123456789abcdefABCDEF
let validIpAddress = (ip)=>{
    let arr = ip.split(':');
    let str = '0123456789abcdefABCDEF';
    
    for(let i =0;i<arr.length;i++){
        let cur = arr[i];
        if(cur.length>4||cur.length<1)return false;
        if(!cur.every(v=>str.indexOf(v)>-1)) return false;
    }
    return true;
    


}

校验ip地址

let validateIpv4 = (ip)=>{
    let arr = ip.split('.');
    let str = '0123456789';
    
    for(let i =0;i<arr.length;i++){
        let cur = arr[i];
        if(cur.length>3||cur.length<1)return false;
        if(!cur.every(v=>str.indexOf(v)>-1)) return false;
        if(Number(cur)<0 ||Number(cur)>255  )return false;
        if(cur.slice(0,1)=='0'&& cur.length>1)return false  //01.01.01.01
        
    
    }
    return true;
    


}

let validateIpv6 = (ip)=>{
    let arr = ip.split(':');
    let str = '0123456789abcdefABCDEF';
    
    for(let i =0;i<arr.length;i++){
        let cur = arr[i];
        if(cur.length>4||cur.length<1)return false;
        if(!cur.every(v=>str.indexOf(v)>-1)) return false;
    }
    return true;
    


}


let validIpAddress = (ip)=>{
    let res;
    if(ip.split('.').length==4){
        res = validateIpv4(ip)
        res = res ? 'IPv4':'Neither';
    
    }else if(ip.split(':').length==8){
        res = validateIpv6(ip)
        res = res ? 'IPv6':'Neither'
    }else{
        res = 'Neither'
    }

    return res ; 
 
}