• 保证测试通过的ip正则,antdIP/IP段的校验方法,antd的textArea中可以输入多个以换行分隔的ip/IP段,并自动检测出错行的原因


    ip正则:let ipRegex = /^(25[0-5]|2[0-4]d|1d{2}|[1-9]d|[1-9]).((([0-9]|([1-9]d)|(1dd)|(2([0-4]d|5[0-5]))))).((([0-9]|([1-9]d)|(1dd)|(2([0-4]d|5[0-5]))))).((([0-9]|([1-9]d)|(1dd)|(2([0-4]d|5[0-5])))))$/;
    简单说明一下:网上的ip正则大部分都没有判断1.0.0.1或者1.01.01.02这种,可能他们默认这种一点分隔开的每一项都可以以0开头,而我们的测试不允许这样,所以我就稍加判断,像这种192.168.01.1这种的就无法通过,必须写成192.168.1.1这样的
     
     
    再附上antd的自定义校验ip/ip段的方法 注:intl.get()此方法是antd项目中国际化的插件,阅读时可以忽略。
     192.168.1.1
     192.168.1.2/24
     192.168.1.1-192.168.1.50
    这些都是可以通过的
    export function checkIp(rule, value, callback) {
    if (!value) {
    callback();
    return;
    }
    // 如果有 - ,分开校验
    if (value.indexOf('-') > -1) {
    const ips = value.split('-');

    for (let i = 0; i < ips.length; i++) {
    if (!ipRegex.test(ips[i])) {
    callback(
    intl.get('请输入正确的IP/IP段。例,192.168.1.1-192.168.1.50')
    );
    return true;
    }
    }

    // 校验前后2个ip的大小关系
    const ip1Number = ip2number(ips[0]);
    const ip2Number = ip2number(ips[1]);

    if (ip1Number >= ip2Number) {
    callback(
    intl.get('网段截止IP必须大于网段起始IP')
    );
    }

    } else if (value.indexOf('/') > -1) {
    const ips = value.split('/');
    // 校验第一个 ip
    if (!ipRegex.test(ips[0])) {
    callback(intl.get('请输入正确的IP/IP段。例,192.168.1.2/24'));
    }
    // 校验子网掩码
    if (!ips[1] || isNaN(ips[1])) {
    callback(intl.get('子网掩码范围是(0,32]。例,192.168.1.2/24'));
    }
    // 这里把 0 排除掉
    if (ips[1] <= 0 || ips[1] > 32) {
    callback(intl.get('子网掩码范围是(0,32]。例,192.168.1.2/24'));
    }
    } else if (!ipRegex.test(value)) {
    callback(intl.get('请输入正确的IP/IP段'));
    }

    callback();
    };
     
    再附上antd的textArea中可以输入多个以换行分隔的ip/IP段,并自动检测出错行的原因的方法
     
    export function checkTextAreaIp(rule, value, callback) {
    if (value) {
    const passArr = []; // 已经检查通过的IP
    const valueArr = value.split(' ');

    try {
    Array.isArray(valueArr) && valueArr.forEach((ip, index) => {
    const lineText = intl.get("第n行[ip]", { num: index + 1, ip: ip });
    if (!ip) {
    throw lineText + intl.get('扫描资产不能为空');
    }
    // 校验去重
    if (passArr.indexOf(ip) !== -1) {
    throw lineText + intl.get('已重复');
    }
    // 如果有 - ,分开校验
    if (ip.indexOf('-') > -1) {
    const ips = ip.split('-');

    for (let i = 0; i < ips.length; i++) {
    if (!ipRegex.test(ips[i])) {
    throw lineText + intl.get('请输入正确的IP/IP段。例,192.168.1.1-192.168.1.50');
    }
    }

    // 校验前后2个ip的大小关系
    const ip1Number = ip2number(ips[0]);
    const ip2Number = ip2number(ips[1]);

    if (ip1Number >= ip2Number) {
    throw lineText + intl.get('网段截止IP必须大于网段起始IP');
    }

    } else if (ip.indexOf('/') > -1) {
    const ips = ip.split('/');
    // 校验第一个 ip
    if (!ipRegex.test(ips[0])) {
    throw lineText + intl.get('请输入正确的IP/IP段。例,192.168.1.2/24');
    }
    // 校验子网掩码
    if (!ips[1] || isNaN(ips[1])) {
    callback(intl.get('子网掩码范围是(0,32]。例,192.168.1.2/24'));
    }
    // 这里把 0 排除掉
    if (ips[1] <= 0 || ips[1] > 32) {
    throw lineText + intl.get('子网掩码范围是(0,32]。例,192.168.1.2/24');
    }
    } else if (!ipRegex.test(ip)) {
    throw lineText + intl.get('请输入正确的IP/IP段');
    }

    passArr.push(ip);
    })
    } catch (e) {
    callback(e);
    } finally {
    callback()
    }
    } else {
    callback();
    }
    };
     
     
     
     
  • 相关阅读:
    BZOJ 1449: [JSOI2009]球队收益 最小费用最大流 网络流
    HDU 4348 To the moon 主席树 在线更新
    省选模拟赛20180416
    线性基总结
    Write-up-Bulldog2
    [Write-up]BSides-Vancouver
    Write-up-Bob_v1.0.1
    Genymotion设置代理至BurpSuite和Charles
    PE之RVA转FOA
    django的序列化
  • 原文地址:https://www.cnblogs.com/qq1170623178/p/11095161.html
Copyright © 2020-2023  润新知