以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
98. 检测合法IP地址

可以使用正则表达式解决这个问题。以下是一个参考实现:

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

  if (ipv4Pattern.test(str)) {
    return true;
  }
  if (ipv6Pattern.test(str)) {
    return true;
  }
  return false;
}

这个实现同时匹配了IPv4和IPv6的地址:

  • 对于IPv4地址,使用正则表达式/^((25[0-5]|2[0-4]\d|1\d{2}|\d{1,2})\.){3}(25[0-5]|2[0-4]\d|1\d{2}|\d{1,2})$/。该正则表达式用^$分别表示字符串的开头和结尾,确保整个字符串完全匹配。然后,用正则表达式分别匹配4个数字段,每个数字段的取值范围为0-255,表示为25[0-5](250-255)、2[0-4]\d(200-249)、1\d{2}(100-199)、\d{1,2}(0-99)。

  • 对于IPv6地址,使用正则表达式/^([\da-fA-F]{1,4}:){7}[\da-fA-F]{1,4}$/。该正则表达式匹配8个用冒号隔开的16进制数字段。每个数字段至多有4位,表示为[\da-fA-F]{1,4}。然后,用冒号分隔8个数字段。这个正则表达式不考虑IPv6的其他规范,比如Zero compression等。

如果匹配到了IPv4或者IPv6地址,则返回true,否则返回false

示例:

```javascript console.log(isValidIP('192.168.0.1')); // true console.log(isValidIP('2001:0db8:85a3:0000:0000:8a2e:0370:7334')); // true console.log(isValidIP('256.123.45.67')); // false console.log(isValidIP('2001:0db8:85a3:00000:0000:8a2e:0370:7334')); // f