`
Rainbow702
  • 浏览: 1065185 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类

IPv6的正则表达式【JAVASCRIPT】

阅读更多

大家都知道IPv4的正则表达式很好写,如下:

^((25[0-5]|2[0-4]\d|[0-1]?\d{1,2})\.){3}(25[0-5]|2[0-4]\d|[0-1]?\d{1,2})$

 但是IPv6的格式相比较而言,就复杂了不止100倍啊,下面是IPv6格式的简单介绍:

Format is x:x:x:x:x:x:x:x
x is a 16 bit hexadecimal field
FEDC:BA98:7654:3210:FEDC:BA98:7654:3210
Leading zeros in a field are optional
:: can be used to represent multiple groups of 16 bits of zero
:: can only be used once in an address
FF01:0:0:0:0:0:0:101 = FF01::101
0:0:0:0:0:0:0:1 = ::1
0:0:0:0:0:0:0:0 = ::

 

不知道谁可以给出一个验证IPv6的正则表达式啊?或者,用迂回的方法也行,即可以通过代码进行判断。

在网上找到一个IPv6的表达式,如下:

 

^\s*((([0-9A-Fa-f]{1,4}:){7}(([0-9A-Fa-f]{1,4})|:))|(([0-9A-Fa-f]{1,4}:){6}(:|((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})|(:[0-9A-Fa-f]{1,4})))|(([0-9A-Fa-f]{1,4}:){5}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}){0,1}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}){0,2}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}){0,3}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:)(:[0-9A-Fa-f]{1,4}){0,4}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(:(:[0-9A-Fa-f]{1,4}){0,5}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})))(%.+)?\s*$

 

但是这么复杂得无法进行判断啊。

 

 

我自己用JAVASCRIPT写了一个迂回的判断方法,如下,有问题,请指教:

// check whether the str is a right IPv6 address
function checkIPv6(str) {
	var idx = str.indexOf("::");
	// there is no "::" in the ip address
	if (idx == -1) {
		var items = str.split(":");
		if (items.length != 8) {
			return false;
		} else {
			for (i in items) {
				if (!isHex(items[i])) {
					return false;
				}
			}
			return true;
		}
	} else {
		// at least, there are two "::" in the ip address
		if (idx != str.lastIndexOf("::")) {
			return false;
		} else {
			var items = str.split("::");
			var items0 = items[0].split(":");
			var items1 = items[1].split(":");
			if ((items0.length + items1.length) > 7) {
				return false;
			} else {
				for (i in items0) {
					if (!isHex(items0[i])) {
						return false;
					}
				}
				for (i in items1) {
					if (!isHex(items1[i])) {
						return false;
					}
				}
				return true;
			}
		}
	}
}

// check whether every char of the str is a Hex char(0~9,a~f,A~F)
function isHex(str) {
	if(str.length == 0 || str.length > 4) {
		return false;
	}
	str = str.toLowerCase();
	var ch;
	for(var i=0; i< str.length; i++) {
		ch = str.charAt(i);
		if(!(ch >= '0' && ch <= '9') && !(ch >= 'a' && ch <= 'f')) {
			return false;
		}
	}
	return true;
}

 

分享到:
评论

相关推荐

    IPv6Regex:PowerShell脚本将IPv6地址与测试IPv6正则表达式和.Net TryParse方法进行匹配

    IPv6正则表达式克里斯·沃里克(Chris Warwick),@ cjwarwickps,2015年10月此PowerShell脚本测试与IPv6地址的文本表示形式匹配的许多正则表达式。 该脚本还针对[System.Net.IpAddress] :: TryParse()方法运行...

    js:校验IPv6地址的正则表达式

    您可能感兴趣的文章:jquery 正整数数字校验正则表达式JavaScript正则表达式校验非零的正整数实例利用js正则表达式校验正数、负数、和小数Javascript校验密码复杂度的正则表达式最全的常用正则表达式大全——包括...

    正则表达式集锦.doc

    (1)IP地址(IPv4)/IPv6地址的正则表达式 ; (2)小数的正则表达式; (3)E-mail地址的正则表达式; (4)手机号码的正则表达式; (5)域名的正则表达式; (6)固定电话的正则表达式; (7)日期的正则表达式...

    正则表达式经典实例

    即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB...

    正则表达式经典实例.pdf

    即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB...

    IPV4和IPV6正则表达式的深入讲解

    IPV4正则表达式 Ipv4地址分为ABCDE五大类,其中ABC类是普通ip地址,D类是组播地址,E类保留,作为研究之用。 范围分别为: A: 1.0.0.1 ―一126.155.255.255 内网地址范围:10.0.0.0 一一10-255.255.255 B: ...

    IP限制规则正则表达式验证

    仅限于IPV4规则,IPV6规则暂没有验证。该类文件可对IP规则进行验证,及对规则进行验证。里面有相关的描述。

    PHP IPV6正则表达式验证代码

    IPV6的时代快要到来了,发一个验证IPV6地址是否合法的正则。

    JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)

    网上有很多关于JS常用正则表达式的文章很全但今天为大家分享一些最新,且非常有用的正则表达式其中有密码强度校验,金额校验,IE版本,IPv4,IPv6校验等

    关于IPV4/IPV6的正则相关模式匹配

    NULL 博文链接:https://init-since.iteye.com/blog/2102665

    JavaScript获取IP获取的是IPV6 如何校验

    1、什么是IPV6?  这个问题可以去百度或Google找一下,应该会有很大的收获,其实主要就是为了解决IPV4地址不够用的问题,V4地址是32位,即:192.168.1.1,而V6地址则是128位,比V4扩大了太多倍。 2、IPV6有子网掩码...

    获取网页数据并发送到指定邮箱

    一个网页抓取的小工具,根据正则表达式抓取网页中指定的信息并发送到指定邮箱

    Apache2.0中文手册(chm格式)

    Unix线程 在支持POSIX线程的Unix系统上,现在Apache能在混合多进程、 多线程模式下运行,使很多(但不是全部的)配置的可扩缩性得到改善。... 所有的正则表达式现在都使用了更为强大的Perl 5 的语法。

    apache2 chm 手册

    Unix线程 在支持POSIX线程的Unix系统上,现在Apache能在混合多进程、 多线程模式下运行,使很多(但不是全部的)配置的可扩缩性得到改善。... 所有的正则表达式现在都使用了更为强大的Perl 5 的语法。

    IPv6 Java方法 简写转成全写,全写转成简写

    IPv6 Java方法 简写转成全写,全写转成简写

    qbittorrent-4.2.5.dmg【最新版】【亲测可用】最好的替代µTorrent的开源软件

    RSS feed支持,带有高级下载过滤器(包括正则表达式) 支持许多Bittorrent扩展: 磁铁链接 分布式哈希表(DHT),对等交换协议(PEX),本地对等发现(LSD) 私人种子 加密连接 还有很多... 通过Web用户界面进行远程...

Global site tag (gtag.js) - Google Analytics