自己百度搞的, 有不对的请各位大神指正
端口校验
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];
}
}