问题描述
给定一个字符串 IP
,请你判断这个字符串是不是一个有效的IPv4或IPv6地址。
有效IPv4地址由4个整数(0-255)组成,整数之间用.
分隔。有效IPv6地址由8组16进制数(0-9a-f,不区分大小写)组成,16进制数之间用:
分隔。
解法一
解题思路:
我们需要分别验证IPv4和IPv6的格式。对于IPv4,我们需要检查每个部分是否为0-255之间的整数,并且不能有前导零。对于IPv6,我们需要检查每个部分是否为0-9a-f之间的16进制数,并且长度为1-4个字符。
/*
* @lc app=leetcode.cn id=468 lang=javascript
*
* [468] 验证IP地址
*/
// @lc code=start
function validIPAddress(IP) {
function isValidIPv4(ip) {
const parts = ip.split('.');
if (parts.length !== 4) return false;
for (let part of parts) {
if (!/^(0|[1-9]\d{0,2})$/.test(part) || parseInt(part) > 255) return false;
}
return true;
}
function isValidIPv6(ip) {
const parts = ip.split(':');
if (parts.length !== 8) return false;
for (let part of parts) {
if (!/^([a-fA-F0-9]{1,4})$/.test(part)) return false;
}
return true;
}
return isValidIPv4(IP) || isValidIPv6(IP);
}
// @lc code=end