随着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;
}