zijie 发表于 2007-1-1 00:05:34

校验IPv6地址的正则表达式

<br>基本规则<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (("FE06::1::2"),false); //只能用一次双冒号<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (("10.2.3.5"),false);&nbsp; //没有冒号<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (("00000:000000:0000::1"),false); //每段的长度不超过 4<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (("0000:0000:0000:0000:0000:0000:0000:0000:0000:1"),false); //总长度不超过 39<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (("JKLN:ssej::1"),false); //必须是十六进制的数字<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (("12::45::1"),false);&nbsp;&nbsp;&nbsp; //双冒号必须只能出现一次<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (("12::44:f:45::1"),false); //双冒号必须只能出现一次(不连续出现)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (("ABEF:452::FE10"),true); //正确的合法的 IPv6<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (("12::1"),true); //合理压缩<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (("::1"),true); //双冒号压缩发<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (("0000:0000:0000:0000:0000:0000:0000:0000"),true); //正确无压缩写法<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (("::1:123:23"),true); //双冒号压缩发<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (("123:45::ADC:6"),true); //双冒号位置不确定<br>

<script>
function isIPv6(str)
{
  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);
}
</script>
<input id=txt><input type=button value=checkIPv6 onclick=alert(isIPv6(txt.value))>

dxfkuxdv 发表于 2008-11-12 08:48:22

·
页: [1]
查看完整版本: 校验IPv6地址的正则表达式