前言
昨天面外包,面试官让我写校验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 ;
}