跨网段校验 实现地址IP比较大小(终止IP大于起始IP)

3 篇文章 0 订阅
1 篇文章 0 订阅

跨网段校验 实现地址IP比较大小(终止IP大于起始IP)

思路

笔者在听到这个需求后表示很懵,了解过后才知道是 地址对象 在选择范围的情况下,终止IP 是需要大于起始IP的,那么在跨网段的情况下该如何比较呢
在这里,笔者有两种思路。
1.第一种 大概是 大家脑子里会不由自主的想到通过 字符串分割ip 地址 来比较数组前三位的方法
如果前三位都符合的话 那么再去比较最后一位。如果最后一位 的大小符合逻辑,那么校验通过
当然 如果 前三位不相等 就属于跨网段 我们还需要去比较 网段大小
2.第二种:说起来第二种了 也是受了旁边那位同事的启发 在其帮助下实现了这个逻辑 就是把字符串类型转换为 Long类型 自动校验是否跨网段,在这里我为大家介绍一下第二种方法,亲测好用!!

代码实现如下:

//这里声明一个自定义方法用来校验 正则IP是否通过
    const validateVal = (obj, pattern = IP_PATTERN) => {
      if (!(obj.val && new RegExp(pattern).test(obj.val))) {
        obj.isError = false;
        nextTick(() => {
          setTimeout(() => {
            obj.isError = true;
          }, 100);
        });
        return false;
      }

      obj.isError = false;
      return true;
    };
    // 此方法是将 输入ip进行分割 循环 位移 来返回 转成long类型后的数字 
    const validateIpToLong = (ipStr) => {
      let ips = ipStr.split(".");
      let ipNumber = 0;
      for (var i = ips.length; i > 0; i--) {
        let leftPosition = parseInt(ips[i]) << (8 * (3 - i));
        ipNumber += leftPosition;
      }
      return ipNumber;
    };
    //输入ip 失去焦点后 的方法  
    //先校验 起始ip终止ip是否符合正则校验 
    const validateValStop = () => {
      if (
        !(
          validateVal(state.hostCollection[0]) &&
          validateVal(state.hostCollection[1])
        )
      ) {
        
        return false;
      } else {
      //在这里 我们将进一步获取 两个ip转换成Long类型的值  
        const ipOne = validateIpToLong(state.hostCollection[0].val);
        const ipTwo = validateIpToLong(state.hostCollection[1].val);
     //比较大小 来进行 错误提示 
        if (ipTwo - ipOne > 0) {
          return true;
        } else {
          nextTick(() => {
            setTimeout(() => {
              state.hostCollection[0].isError = true;
            }, 100);
          });
          return false;
        }
      }
    };
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值