实现一个输入框多个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();

};

相关推荐
sunshine22 girl8 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
福兮说9 小时前
canvas 旋转图片的六个坑:四角被裁、Math.ceil 多出 1px 黑边、JPG 角发黑、翻转方向反了
前端·javascript·图像处理·canvas
code2cat9 小时前
Java进阶篇之AtomicStampedReference:引用回到原值,版本戳仍能记住变化
java·cas·并发编程·aba
huainingning9 小时前
RJ SW Console口忘记密码处理方法
linux·运维·服务器
布裘9 小时前
【银河麒麟】桌面系统循环登录,无法进入桌面?
linux·运维·服务器
慧都小项9 小时前
程序到了Linux才出错?用CLion把调试接到目标环境
linux·运维·服务器
传人once10 小时前
多图片上传预览功能如何写
前端·css·html·jquery·html5
泡茶喝茶写代码10 小时前
A股量化数据工程:从 REST 接口到策略信号(第 8 篇):成长能力因子:营收与利润增速
java·python·股票数据api·股票数据api接口·股票量化数据api·股票量化数据接口·股票数据api数据
Eric.4610 小时前
Wan‑Animate+MiniMax-H3 本地部署 AI 漫剧流水线:8G 显存动作迁移与动态分镜工程实战
前端·人工智能·comfyui·ai漫剧
\光辉岁月/11 小时前
7.javase-面向对象
java·开发语言