js怎样用正则表达式检索ipv6ipv4

js yekong

要在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地址。

喜欢