我正在尝试解决这个问题:
https://www.codewars.com/kata/515decfd9dcfc23bb6000006/train/javascript
编写一个算法,以点十进制格式识别有效的 IPv4 地址。如果 IP 由四个八位位组组成,且值在 0 到 255 之间(含 0 和 255),则应被视为有效。
请注意,前导零(例如 01.02.03.04)被视为无效。
好: 1.2.3.4
坏: 1.2.3 256.1.1.1 a11/.1.1。
我的解决方案通过了 331 项测试,失败了 6 项,但我不知道为什么。
function isValidIP(str) {
if(str.length === 0) return false;
let newReg1 = new RegExp(/^0\.0\.0\.0$/);
let newReg = new RegExp(/^[1-9]\d{0,2}\.[1-9]\d{0,2}\.[1-9]\d{0,2}\.[1-9]\d{0,2}$/);
let newArr = str.split('.');
for (let i = 0; i < newArr.length; i++){
if(newArr[i] > 255)
return false;
}
if(newReg.test(str) === true || newReg1.test(str) === true){
return true;
} else {
return false;
}
}
而且我不知道是否有办法检查它们失败的原因。
最佳答案
您排除了前导零,但并非全部都应该如此。 0.0.0.0
有效。
此外,由于您已经在检查数字,因此实际上不需要正则表达式,这将使事情变得更加复杂:
function isValidIP(str) {
const nums = str.split('.');
const validNums = nums.every(s => ''+parseInt(s, 10) === s && s >= 0 && s <= 255);
const validLen = nums.length === 4;
return validNums && validLen;
}
console.log(isValidIP('1.0.0.1')); // true
console.log(isValidIP('192.168.0.1')); // true
console.log(isValidIP('256.0.0.1')); // false
console.log(isValidIP('01.0.0.1')); // false
关于javascript - 为什么我的 RegExp 无法搜索 IP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60625762/