端口, ip, 域名校验; 计算ip地址范围

自己百度搞的, 有不对的请各位大神指正

端口校验

var t = function (ports) {
    // 端口正则校验
    var portValidate = function (port) {
        if (/^([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/.test(port)) {
            return true;
        }
        return false;
    }

    var flag = true;
    var obj = [];
    var a = ports.split(";");
    $.each(a, function (index, item) {
        if (item.indexOf("-") != -1) {//端口段
            var b = item.split("-");
            if (b.length == 2) {
                obj = obj.concat(b);
            } else {
                flag = false;
                return;
            }
        } else {//单个端口
            obj.push(item);
        }
    });
    $.each(obj, function (index2, item2) {
        if (!portValidate(item2)) {
            flag = false;
            return;
        }
    });
    return flag;
}

ip及域名校验

域名校验自己写的,

支持格式:

xxx-xxx.aa, aa必须是字母, 至少2位, xxx-xxx不超长度可以无限加, 每段可以有多个-, xxx字母和数组都支持

校验支持单个ip, ip段, 网关, 域名, 支持多个, 用;隔开(IP段只支持最后一段区间, 需要可以自己改)

例:123.123.123.123;123.123.123.123/24;123.123.123.123-220;mp.csdn.net

var t = function (ips) {
    // ip正则校验
    var ipValidate = function (ip) {
        if (/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/.test(ip)) {
            return true;
        }
        return false;
    }

    //域名校验
    var domainValidate = function (domain) {
        if (/^(([a-zA-Z0-9]([-a-zA-Z0-9])*){1,62}\.)+[a-zA-Z]{2,62}$/.test(domain)) {
            return true;
        }
        return false;
    }

    var flag = false;
    var a = ips.split(";");
    $.each(a, function (index, item) {
        flag = false;
        //ip网段地址
        if (!flag && item.indexOf("/") != -1) {
            var b = item.split("/");
            //掩码长度大于1, 不能小于32
            if (b.length == 2 && ipValidate(b[0]) && /^\+?[1-9][0-9]*$/.test(b[1]) && b[1] > 0 && b[1] <= 32) {
                flag = true;
            }
        }

        //ip连续地址
        if (!flag && item.indexOf("-") != -1) {
            var b = item.split("-");
            if (b.length == 2 && ipValidate(b[0])) {
                var str = b[0].substr(b[0].lastIndexOf(".") + 1, b[0].length + 1);
                if (/^\+?[1-9][0-9]*$/.test(b[1]) && b[1] > str && b[1] < 256) {
                    flag = true;
                }
            }
        }

        //ip单个地址
        if (!flag && ipValidate(item)) {
            flag = true;
        }

        //域名校验
        if (!flag && domainValidate(item)) {
            flag = true;
        }

        if (!flag) {
            return;
        }
    });
    return flag;
}

根据网关及掩码长度计算ip地址范围(去掉了网关和广播地址, 只有可用主机地址)

//格式化ip, 转换二进制
order.formatTo2 = function (value) {
    var ob = value.split(".");
    var b1 = parseInt(ob[0]);
    var b2 = parseInt(ob[1]);
    var b3 = parseInt(ob[2]);
    var b4 = parseInt(ob[3]);
    return (Array(8).join(0) + b1.toString(2)).slice(-8) + (Array(8).join(0) + b2.toString(2)).slice(-8) + (Array(8).join(0) + b3.toString(2)).slice(-8) + (Array(8).join(0) + b4.toString(2)).slice(-8);
}

//格式化ip, 二进制转换十进制
order.formatTo10 = function (value) {
    var ob = value.split(".");
    return parseInt(ob[0], 2) + "." + parseInt(ob[1], 2) + "." + parseInt(ob[2], 2) + "." + parseInt(ob[3], 2);
}

//网段转换ip区间
order.gatewayToIpSection = function (value) {
    var b = value.split("/");
    if(b[1] != "" && !isNaN(b[1])){
        if(b[1] == 32){
            return b[0];
        } else {
            var ipBy2 = order.formatTo2(b[0]);//ip转换2进制
            var reg = new RegExp("\\w{1,8}", "g");
            var startIpBy2 = (ipBy2.slice(0, b[1]) + Array(32 - b[1]).join(0) + "1").match(reg).join(".");
            var endIpBy2 = (ipBy2.slice(0, b[1]) + Array(32 - b[1]).join(1) + "0").match(reg).join(".");
            var startIp = order.formatTo10(startIpBy2);
            var endIp = order.formatTo10(endIpBy2);
            return startIp + "-" + endIp;
        }
    } else {
        return b[0];
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值