📜  ip 地址的正则表达式 javascript (1)

📅  最后修改于: 2023-12-03 14:42:09.826000             🧑  作者: Mango

IP地址的正则表达式(JavaScript)

IP地址是网络通信中非常重要的一个元素,根据某些需求,我们可能需要对IP地址进行校验或者提取。这时,我们就需要使用正则表达式。在本文中,我们将会学习如何使用JavaScript正则表达式来操作IP地址。

IPv4地址

IPv4地址是32位无符号整数,通常被分为4个8位二进制数,用点号(.)相连表示。例如,192.168.0.1就是一个IPv4地址。下面是一个匹配IPv4地址的正则表达式,逐个解释:

const ipv4Pattern = /^((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$/;

这个正则表达式中,'^'表示匹配开始,'$'表示匹配结束。整个正则表达式可以分为4段,每一段表示一个8位二进制数,表示方法是:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]

\d表示任意数字,[1-9]\d表示从10到99之间的任意数字,1\d{2}表示从100到199之间的数字,2[0-4]\d表示从200到249之间的数字,25[0-5]表示从250到255之间的数字。

用圆括号将整段表达式包裹起来,并在每段后面加上一个点号(.)。

IPv6地址

IPv6地址是128位的无符号整数,在表示时通常采用8个16位的十六进制数来表示,每两个十六进制数之间使用冒号(:)连接。例如,2001:0db8:85a3:0000:0000:8a2e:0370:7334就是一个IPv6地址。下面是一个匹配IPv6地址的正则表达式:

const ipv6Pattern = /^([\da-fA-F]{0,4}:){7}[\da-fA-F]{0,4}$/;

这个正则表达式中,^$表示匹配开始和结束。([\da-fA-F]{0,4}:)表示匹配一个16位的十六进制数,[\da-fA-F]{0,4}表示匹配最多4个十六进制数字。将这个表达式匹配7次,并在最后匹配一个16位的十六进制数。

实例

以下是使用上述正则表达式校验IP地址的示例代码:

const ipv4Pattern = /^((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$/;
const ipv6Pattern = /^([\da-fA-F]{0,4}:){7}[\da-fA-F]{0,4}$/;

function validateIpAddress(ip) {
  if (ipv4Pattern.test(ip)) {
    return "IPv4";
  } else if (ipv6Pattern.test(ip)) {
    return "IPv6";
  } else {
    return "invalid";
  }
}

console.log(validateIpAddress("192.168.0.1")); // 输出 "IPv4"
console.log(validateIpAddress("2001:0db8:85a3:0000:0000:8a2e:0370:7334")); // 输出 "IPv6"
console.log(validateIpAddress("256.256.256.256")); // 输出 "invalid"

在示例中,我们使用了上述介绍的两个正则表达式对IP地址进行校验,并输出IP地址的类型。

总结

在JavaScript中,使用正则表达式对IP地址进行校验或者提取非常方便,只需要使用相应的正则表达式即可。当然,如果你需要对更复杂的IP地址进行操作,你也可以自行编写更为复杂的正则表达式。