如何在 HTML 和 JavaScript 中正确验证 IPv4 地址
发布时间 - 2026-01-02 00:00:00 点击率:次本文详解如何通过正则匹配与逻辑校验结合的方式,准确验证用户输入的 ipv4 地址(如 `192.168.1.1`),避免仅依赖简单正则导致的误判(如 `999.999.999.999` 通过但实际非法),并提供可直接运行的完整示例代码。
单纯使用正则表达式(如 pattern="\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")只能检查格式是否“像”IP,但无法确保每个八位组(octet)在合法范围内(0–255),也无法排除前导零(如 01.1.1.1 或 000.000.000.000)等无效写法。因此,真正的 IP 验证必须分两步:格式匹配 + 语义校验。
以下是一个健壮、可复用的客户端验证方案:
✅ 正确实现步骤
- HTML 结构:使用
-
JavaScript 校验:监听 input 事件,用正则提取四段数字,再逐段验证:
- 每段必须是 0–255 的整数;
- 允许 0(如 0.0.0.0 是合法 IPv4 地址),但不允许前导零(即 01、007 等非规范写法应被拒绝);
- 注意:parseInt("01", 10) 会返回 1,因此需额外检查原始字符串是否含前导零(可通过 numStr !== String(Number(numStr)) 判断)。
✅ 推荐代码(含前导零防护)
const isValidOctet = (str) => {
// 拒绝空字符串、非数字、或带前导零(除非就是 "0")
if (!/^\d+$/.test(str)) return false;
if (str.length > 1 && str.startsWith('0')) return false; // 排除 "01", "00", "099"
const num = Number(str);
return num >= 0 && num <= 255;
};
document.addEventListener('DOMContentLoaded', () => {
const input = docume
nt.getElementById('txtSignDSCIPAdd');
input.addEventListener('input', (e) => {
const value = e.target.value.trim();
const match = value.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/);
e.target.setCustomValidity('');
if (match) {
const [_, a, b, c, d] = match;
const octets = [a, b, c, d];
const allValid = octets.every(isValidOctet);
if (!allValid) {
e.target.setCustomValidity('Invalid IPv4 address: each octet must be 0–255 with no leading zeros.');
}
} else if (value !== '') {
e.target.setCustomValidity('IPv4 format required: four dot-separated numbers (e.g., 127.0.0.1).');
}
});
// 可选:表单提交时强制校验(增强兼容性)
document.getElementById('ipForm').addEventListener('submit', (e) => {
if (!input.checkValidity()) {
e.preventDefault();
input.reportValidity();
}
});
});⚠️ 注意事项
- ❌ 不要仅用 replace(/[^0-9.]/g, '') 这类过滤逻辑替代验证——它不阻止 .... 或 192.168.1.256;
- ❌ pattern 属性仅用于基础提示,不可信,浏览器可能忽略或绕过,必须配合 JS 逻辑校验;
- ✅ 使用 setCustomValidity() + reportValidity() 可触发原生 HTML5 表单验证 UI,体验更统一;
- ✅ 若需支持 IPv6,请改用专门库(如 is-ip)或更复杂正则,本文聚焦标准 IPv4。
通过以上方法,你将获得一个既符合标准、又具备良好用户体验的 IPv4 输入验证方案。
# javascript
# java
# html
# js
# 正则表达式
# html5
# 浏览器
# ipv6
# ipad
# 表单提交
# red
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
html5的keygen标签为什么废弃_替代方案说明【解答】
历史网站制作软件,华为如何找回被删除的网站?
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
微信推文制作网站有哪些,怎么做微信推文,急?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
大连网站制作公司哪家好一点,大连买房网站哪个好?
如何在IIS中新建站点并配置端口与IP地址?
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
郑州企业网站制作公司,郑州招聘网站有哪些?
如何快速登录WAP自助建站平台?
Android自定义listview布局实现上拉加载下拉刷新功能
如何用JavaScript实现文本编辑器_光标和选区怎么处理
QQ浏览器网页版登录入口 个人中心在线进入
教学论文网站制作软件有哪些,写论文用什么软件
?
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Thinkphp 中 distinct 的用法解析
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
高端网站建设与定制开发一站式解决方案 中企动力
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
网站页面设计需要考虑到这些问题
Python图片处理进阶教程_Pillow滤镜与图像增强
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
Python高阶函数应用_函数作为参数说明【指导】
香港网站服务器数量如何影响SEO优化效果?
如何在阿里云域名上完成建站全流程?
如何确保FTP站点访问权限与数据传输安全?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
python中快速进行多个字符替换的方法小结
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
大同网页,大同瑞慈医院官网?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
,网页ppt怎么弄成自己的ppt?
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】


nt.getElementById('txtSignDSCIPAdd');
input.addEventListener('input', (e) => {
const value = e.target.value.trim();
const match = value.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/);
e.target.setCustomValidity('');
if (match) {
const [_, a, b, c, d] = match;
const octets = [a, b, c, d];
const allValid = octets.every(isValidOctet);
if (!allValid) {
e.target.setCustomValidity('Invalid IPv4 address: each octet must be 0–255 with no leading zeros.');
}
} else if (value !== '') {
e.target.setCustomValidity('IPv4 format required: four dot-separated numbers (e.g., 127.0.0.1).');
}
});
// 可选:表单提交时强制校验(增强兼容性)
document.getElementById('ipForm').addEventListener('submit', (e) => {
if (!input.checkValidity()) {
e.preventDefault();
input.reportValidity();
}
});
});