实现一个输入框多个ip以逗号分隔最多20组,且ip不能重复

// 非必填项 多个 IP地址校验正则函数

var validatorIp = (rule, value, callback) => {

// multicast_type为0 '任意源'时 没有信源IP校验,跳过所有IP校验

if (this.form.multicast_type === 0) {

return callback();

}

// multicast_type不为0时,开始执行IP校验逻辑

if (!value) {

return callback('信源IP不能为空');

}

// 定义IPv4地址的正则校验规则

const ipRegex = /^((250-5|20-4\d|01?\d\d?)\.){3}(250-5|20-4\d|01?\d\d?)$/;

// 按逗号分割IP组,同时去除每组首尾空格

const ipGroups = value.split(',').map(ip => ip.trim());

// 校验IP组数量,最多20组

if (ipGroups.length > 20) {

return callback(new Error('最多支持20组IP地址'));

}

// 检查是否有空值分组

if (ipGroups.some(ip => !ip)) {

// return callback(new Error('请输入正确的IP地址,多个IP用逗号","分隔'));

return callback(new Error('IP地址分组不能为空'));

}

// 通过Set去重判断是否存在重复IP

/* const uniqueIps = new Set(ipGroups);

if (uniqueIps.size !== ipGroups.length) {

return callback(new Error('IP地址不能重复'));

} */

const validIps = \[\];// 有效的IP地址

const duplicateIps = \[\];// 重复的ip

const seenIps = new Set();// 创建一个Set数据结构来跟踪已经处理过的IP地址

// 遍历校验每个IP的格式合法性

for (const ip of ipGroups) {

if (!ipRegex.test(ip)) {

return callback(new Error('请输入正确的IP地址,多个IP用逗号","分隔'));

}

// 禁止输入0.0.0.0和255.255.255.255

if (ip === '0.0.0.0' || ip === '255.255.255.255') {

return callback(new Error('不允许输入0.0.0.0和255.255.255.255等特殊IP'));

}

// 检查重复

if (seenIps.has(ip)) {

duplicateIps.push(ip);

} else {

seenIps.add(ip);

validIps.push(ip);

}

}

if (duplicateIps.length > 0) {

return callback(`发现重复IP地址: ${...new Set(duplicateIps).join(', ')}`);

}

// 校验通过

return callback();

};

相关推荐
广州灵眸科技有限公司1 天前
4G 模组开机自连 systemd 服务方案:基于灵眸科技EAI1106--Core-T
运维·服务器·科技
云和数据.ChenGuang1 天前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
摇滚侠1 天前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
@大迁世界1 天前
Firefox 本地模式:localhost 再见了 ?
前端·架构
qq_401700411 天前
Linux设备树详解
linux·运维·服务器
刚入门的大一新生1 天前
Linux-信号
linux·运维·服务器
silvamux_1 天前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
米米商聊1 天前
同名附件为什么被 Map 覆盖?重复键与一对多索引
前端·javascript
步行cgn1 天前
StringHttpMessageConverter 详解:Spring MVC 中字符串读写的默认转换器
java·spring·mvc
摇滚侠1 天前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 11
java·笔记·python