javascript - 为什么我的 RegExp 无法搜索 IP 服务器

标签 javascript node.js

我正在尝试解决这个问题:

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/

相关文章:

javascript - 如何在 React Native 中绘制图片?

javascript - when 在 aurelia 验证中如何工作

javascript - 无需过多嵌套即可调用多个 API

javascript - 如何防止 NodeJS 中的异步 - 等待任务 a 完成后再启动任务 b

javascript - ASP.NET MVC : Masterpage: How to set css class on active menu item

javascript - JS ADDEventListener 动画结束触发过早

javascript - 使用 Aurelia CLI 安装任何 npm 模块的分步过程是什么?

javascript - 无法使用 Node js将视频上传到bunny流

javascript - 模块导出,nodejs 护照验证时间太长

javascript - AngularJS 不向 NodeJS 服务器发送数据