随着ipv6的普及,在web上添加ip6地址的要求逐渐增多,下面这个函数是我按照ipv6的定义写的判断,可以用来判断正常的,缩写的ipv6格式,同时可以判断ipv6和ipv4混合的格式:
//统计 10F: 或者:10B的个数
function cLength(str){
var reg = /([0-9a-f]{1,4}:)|(:[0-9a-f]{1,4})/gi;
var temp = str.replace(reg,' ');
return temp.length;
}
/*
* 判断ipv6格式
* @author gblfy
*
* @version 2021-05-26
* */
function isIPv6(tmpstr) {
//CDCD:910A:2222:5498:8475:1111:3900:2020
var patrn=/^([0-9a-f]{1,4}:){7}[0-9a-f]{1,4}$/i;
var r=patrn.exec(tmpstr)
if(r) {
return true;
}
if(tmpstr=="::"){
return true;
}
//F:F:F::1:1 F:F:F:F:F::1 F::F:F:F:F:1格式
patrn=/^(([0-9a-f]{1,4}:){0,6})((:[0-9a-f]{1,4}){0,6})$/i;
r=patrn.exec(tmpstr);
if(r) {
var c=cLength(tmpstr);
if(c<=7 && c>0) {
return true;
}
}
//F:F:10F::
patrn=/^([0-9a-f]{1,4}:){1,7}:$/i;
r=patrn.exec(tmpstr);
if(r) {
return true;
}
//::F:F:10F
patrn=/^:(:[0-9a-f]{1,4}){1,7}$/i;
r=patrn.exec(tmpstr);
if(r) {
return true;
}
//F:0:0:0:0:0:10.0.0.1格式
patrn=/^([0-9a-f]{1,4}:){6}(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/i;
r=patrn.exec(tmpstr);
if(r) {
if(r[2]<=255 && r[3]<=255 &&r[4]<=255 && r[5]<=255 )
return true;
}
//F::10.0.0.1格式
patrn=/^([0-9a-f]{1,4}:){1,5}:(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/i;
r=patrn.exec(tmpstr);
if(r) {
if(r[2]<=255 && r[3]<=255 &&r[4]<=255 && r[5]<=255 )
return true;
}
//::10.0.0.1格式
patrn=/^::(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/i;
r=patrn.exec(tmpstr);
if(r) {
if(r[1]<=255 && r[2]<=255 &&r[3]<=255 && r[4]<=255)
return true;
}
return false;
}