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

};

相关推荐
达达爱吃肉4 分钟前
claude 接入deepseek 运行报错
java·服务器·前端
OctShop大型商城源码4 分钟前
OctShop对比JAVA商城源码_OctShop大型专业级多用户商城源码
java·开发语言·商城系统·小程序商城·octshop
guslegend8 分钟前
AGENT.md,Skill与工程规范
java·开发语言·数据库
jingling55510 分钟前
Flutter | Dio网络请求实战
android·开发语言·前端·flutter
周末也要写八哥12 分钟前
C++中单线程方式之无脑上锁
java·开发语言·c++
武器大师7215 分钟前
从零开始在 Linux 上编译运行 lvgljs 图形界面项目
linux·运维·服务器
freeinlife'17 分钟前
精准秒表计时器实现---基于js
开发语言·前端·javascript
剑神一笑17 分钟前
Linux free 命令深度解析:从内存监控到 OOM 排查的完整指南
linux·运维·服务器
Reisentyan19 分钟前
[Advance]GoLang Learn Data Day 4
java·数据库·golang
MaCa .BaKa26 分钟前
55-宠物爱心救助领养系统-宠物救助领养系统
java·vue.js·tomcat·maven·springboot·宠物救助领养系统