要在JavaScript中使用正则表达式检索IPv6和IPv4地址,需要分别为IPv6和IPv4定义正则表达式,因为它们的格式差异较大。
IPv4地址的正则表达式
IPv4地址由四组数字组成,每组数字范围从0到255,组之间由点(.
)分隔。一个用于匹配IPv4地址的正则表达式如下:
let ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
IPv6地址的正则表达式
IPv6地址更为复杂,它由8组16进制数表示,每组之间用冒号(:
)分隔。一个简化版用于匹配IPv6地址的正则表达式如下:
let ipv6Regex = /^([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4})$/;
请注意,这个IPv6的正则表达式是一个简化版,它不考虑IPv6地址中的缩写形式。IPv6地址的完整正则表达式会更加复杂,因为IPv6允许省略连续的零。
示例代码
以下是如何使用这些正则表达式来检测字符串是否为IPv4或IPv6地址的示例:
function detectIPAddress(ip) {
let ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
let ipv6Regex = /^([0-9a-fA-F]{1,4}:){7}([0-9a-fA-F]{1,4})$/;
if (ipv4Regex.test(ip)) {
return "IPv4";
} else if (ipv6Regex.test(ip)) {
return "IPv6";
} else {
return "Not a valid IP address";
}
}
console.log(detectIPAddress("192.168.1.1")); // 输出:IPv4
console.log(detectIPAddress("2001:0db8:85a3:0000:0000:8a2e:0370:7334")); // 输出:IPv6
console.log(detectIPAddress("NotAnIP")); // 输出:Not a valid IP address
这段代码定义了一个detectIPAddress
函数,它接受一个字符串ip
作为参数,然后使用之前定义的正则表达式来判断这个字符串是IPv4地址、IPv6地址,还是无效的IP地址。