IPV6专题(二)

在(一)中已经将IPV6的简要知识说明了一下,下面来处理下IPV6网址。

IPV6的网址写法上需要兼容零压缩法,因此需要对IPV6的网址进行转换,下面是JS的转换代码:

function transitIp(ipaddr)//将IPV6地址补全
	{
		var ipaddress = ipaddr.split("/");
		var ipaddrs = ipaddress[0].split(":");
		if(ipaddrs.length<8)
		{
			var count = 0;
			for(var i=0;i<ipaddrs.length;i++)
			{
				if(ipaddrs[i]=="")
				{
					if(count==1)
					{
						ipaddrs[i] = addZero(4);
						continue;
					}
					ipaddrs[i] = addZero((9-ipaddrs.length)*4);
					count++;
				}
				else
				{
					ipaddrs[i] += ":";
				}
			}
		}
		else if(ipaddrs.length==8)
		{
			for(var i=0;i<8;i++)
			{
				ipaddrs[i] += ":";
			}
		}
		上述补齐完成,将内容放置于ipaddrs中,但不标准
		return initaddr(ipaddrs);//获得了ip地址的完整字符串
	}
	function addZero(num)
	{
	    var zerostr = "";
		for(var i=1;i<num+1;i++)
		{
			zerostr+="0";
			if(i%4==0)
			{
				zerostr+=":";
			}
		}
		return zerostr;
	}
	function initaddr(ipaddrs)
	{
		var iparray ="";
		for(var i=0;i<ipaddrs.length;i++)
		{
			iparray+=ipaddrs[i];
		}
		if(iparray.charAt(iparray.length-1)==':')
		{
			iparray = iparray.substr(0,iparray.length-1);
		}
		//var iparrays = iparray.split(":");
		//return iparrays;
		return iparray;
	}
IPV6地址判断的正则表达式为:

function isIPv6(str)//IPV6地址判断
	{
		return /:/.test(str)
		&&str.match(/:/g).length<8
		&&/::/.test(str)
		?(str.match(/::/g).length==1
		&&/^::$|^(::)?([\da-f]{1,4}(:|::))*[\da-f]{1,4}(:|::)?$/i.test(str))
		:/^([\da-f]{1,4}:){7}[\da-f]{1,4}$/i.test(str);
	}  





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值