验证输入的字符串是否是有效的IP地址:
-
IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,范围为 0-255,用 . 进行分割。IPv4地址内的数不会以0开头。
-
IPv6地址由8组16进制的数字表示,每组表示16比特,这些组数字通过 . 分割,忽略0开头,忽略大小写。
时间复杂度 O(1),空间复杂度O(1)
正则判断
- Runtime: 80 ms, faster than 55.68%
/**
* @param {string} IP
* @return {string}
*/
var validIPAddress = function(IP) {
if(IP.indexOf('.') > -1) {
return /^((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])$/g.test(IP) ? "IPv4" : "Neither"
} else if(IP.indexOf(':')) {
return /^(([0-9a-fA-F]{1,4})\:){7}([0-9a-fA-F]{1,4})$/g.test(IP) ? "IPv6" : "Neither"
}
return "Neither"
};
常规判断方法
首先判断长度,然后判断每一项的长度,以0开头,然后判断每一项的组成元素
- Runtime: 72 ms, faster than 92.43%
- Memory Usage: 38.6 MB, less than 48.65%
/**
* @param {string} IP
* @return {string}
*/
var validIPAddress = function(IP) {
if(IP.indexOf('.') > 0) {
let ipvf = IP.split('.')
if(ipvf.length !== 4) {
return 'Neither'
}
let res = ipvf.every(item => {
if(item[0] === '0' && item.length > 1 || item.length === 0) {
return false
} else {
let t = item.split('').every(i => '0123456789'.indexOf(i) > -1) && item - '0' >= 0 && item - '0' <= 255
return t
}
})
return res ? 'IPv4' : 'Neither'
} else if(IP.indexOf(':') > 0) {
let ipvs = IP.split(':')
if(ipvs.length !== 8) {
return 'Neither'
}
let res = ipvs.every(item => {
if(item.length > 4 || item.length === 0) {
return false
} else {
let t = item.split('').every(i => '0123456789abcdefABCDEF'.indexOf(i) > -1)
return t
}
})
return res ? 'IPv6' : 'Neither'
}
return 'Neither'
};
网友评论