export function checkTextAreaIp(rule, value, callback) {
if (value) {
const passArr = []; // 已经检查通过的IP
const valueArr = value.split(‘\n‘);
try {
Array.isArray(valueArr) && valueArr.forEach((ip, index) => {
const lineText = "第{num}行[{ip}]", { num: index + 1, ip: ip });
if (!ip) {
throw lineText + “不能为空”;
}
// 校验去重
if (passArr.indexOf(ip) !== -1) {
throw lineText +"已重复";
}
// 如果有 - ,分开校验
if (ip.indexOf(‘-‘) > -1) {
const ips = ip.split(‘-‘);
for (let i = 0; i < ips.length; i++) {
if (!ipRegex.test(ips[i])) {
throw lineText + ‘请输入正确的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 + ‘网段截止IP必须大于网段起始IP‘
}
} else if (ip.indexOf(‘/‘) > -1) {
const ips = ip.split(‘/‘);
// 校验第一个 ip
if (!ipRegex.test(ips[0])) {
throw lineText + ‘请输入正确的IP/IP段。例,192.168.1.2/24‘
}
// 校验子网掩码
if (!ips[1] || isNaN(ips[1])) {
callback(‘子网掩码范围是(0,32]。例,192.168.1.2/24‘);
}
// 这里把 0 排除掉
if (ips[1] <= 0 || ips[1] > 32) {
throw lineText + ‘子网掩码范围是(0,32]。例,192.168.1.2/24‘;
}
} else if (!ipRegex.test(ip)) {
throw lineText +请输入正确的IP/IP段
}
passArr.push(ip);
})
} catch (e) {
callback(e);
} finally {
callback()
}
} else {
callback();
}
};
正则校验IP、IP-IP、IP/IP(去重)
原文:https://www.cnblogs.com/ding-dong/p/14324225.html