JS IPV4和IPV6混合正则校验

IPV4和IPV6混合正则校验

const ipReg = /((^\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\s*$)|(^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$))/;

不同IP换行(回车)输入

 validator = (rule, value, callback) => {
    if (!value) {
      callback();
    }
    // value = value.replace(/\;/g, ',');
    // value = value.replace(/\;/g, ',');
    // value = value.replace(/\,/g, ',');
    // value = value.replace(/\s+/g, ',');
    // value = value.replace(/\n/g, '');
    value = value.split('\n');
    console.log(value, 'val-----')
    value = value.filter(item => item);
    const errorIp = value.filter((item) => {
      if (item[0] == '!') {
        item = item.substring(1, item.length);
      }
      if (item.indexOf('/') > -1) {
        return !new RegExp(ipReg).test(item) || (!item.split('/')[1]) || isNaN(Number(item.split('/')[1]));
      } else if (item.indexOf('-') > -1) {
        return !new RegExp(ipReg).test(item) || (!item.split('-')[1]) || isNaN(Number(item.split('-')[1]));
      }
      //踩雷,这种写法,如果||第一个条件不满足,就回走else,这个和||的基础语法有关
      // else if (( item.indexOf('$') || item.indexOf('@') || item.indexOf(',') || item.indexOf(';') || item.indexOf(';') || item.indexOf(',')) > -1) {
      //   callback('IP请换行输入');
      // } 
      else if ((item.indexOf(' ')) > -1 || item.indexOf('@') > -1 || item.indexOf(',') > -1 || item.indexOf(',') > -1 || item.indexOf(';') > -1 || item.indexOf(';') > -1 || item.indexOf('$') > -1) {
        callback('IP请换行输入');
      }
      else {
        return !new RegExp(ipReg).test(item);
      }
    });
    if (errorIp.length > 0) {
      callback('请输入正确的IP');
    }
    callback();
  }

在form中的使用:

<FormItem label="" style={{ marginBottom: 10 }}>
  {form.getFieldDecorator("IP", {
    rules: [
      { required: true, message: "请输入IP" },
      { validator: this.validator },
    ],
  })(
    <Input.TextArea
      style={{ width: '580px', height: 260 }}
    />
  )}
</FormItem>

补充:刚刚在网上看到了好的IPV4和IPV6校验,感觉很有用,上链接:https://www.w3cschool.cn/notebook/notebook-jghl2tn5.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值