以下为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
。
示例:
console.log(isValidIP('192.168.0.1')); // trueconsole.log(isValidIP('2001:0db8:85a3:0000:0000:8a2e:0370:7334')); // trueconsole.log(isValidIP('256.123.45.67')); // falseconsole.log(isValidIP('2001:0db8:85a3:00000:0000:8a2e:0370:7334')); // f