如何用JavaScript进行表单验证_正则表达式有哪些常用模式
发布时间:2025-12-31 00:00
发布者:夜晨
浏览次数:该用正则做格式初筛,但不能替代后端校验;适合邮箱结构、手机号位数等,不适合语义判断;需注意边界条件、兼容性及与原生验证的冲突。
表单验证该不该用正则?先看这三点
纯前端验证不能替代后端校验,但能立刻反馈、减少无效请求。正则适合做格式初筛(比如邮箱结构、手机号位数),不适合做语义判断(比如邮箱是否真实存在)。别用 /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/ 验证所有邮箱——它会放过 test@.com,也会拒绝 user+tag@example.co.uk。
这些正则模式在表单里最常踩坑
以下模式按实际使用频率和出错率排序,重点标出边界条件和兼容性注意点:
-
^\d{11}$:匹配 11 位数字,但中国手机号有带+86或空格的合法输入,建议先.replace(/\s+/g, '')清理再验证 -
^[^\s@]+@[^\s@]+\.[^\s@]+$:比“教科书邮箱正则”更宽松,能接受常见国际化域名,但不校验 TLD 长度(如.travel) -
^1[3-9]\d{9}$:国内手机号基础校验,注意避开已停用号段(如 140–144,170–171 等虚拟运营商号需额外查库) -
^[a-zA-Z0-9_\u4e00-\u9fa5]{2,16}$:用户名支持中英文数字下划线,2–16 字符,必须加 ^ 和 $ 锚定开头结尾,否则" admin "也能通过
怎么把正则塞进 addEventListener('submit') 里?
别在 submit 事件里只调 return false,要逐字段验证并聚焦第一个错误项。关键逻辑是:遇到失败立即 event.preventDefault(),并 input.focus(),否则用户看不到哪错了。
document.getElementById('myForm').addEventListener('submit', function (e) {
const email = document.getElementById('email').value.trim();
const phone = document.getElementById('phone').value.replace(/\s+/g, '');
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
alert('邮箱格式不对');
e.preventDefault();
document.getElementById('email').focus();
return;
}
if (!/^1[3-9]\d{9}$/.test(phone)) {
alert('手机号格式不对');
e.preventDefault();
document.getElementById('phone').focus();
return;
}
});
为什么 input[type="email"] 不能直接信?
浏览器原生验证只跑 ^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$ 这类极简正则,且不同浏览器行为不一致。Chrome 允许 test@@example.com,Safari 却报错;Firefox 对中文邮箱直接拒绝。更麻烦的是:它无法配合自定义提示文案,setCustomValidity() 又容易和原生冲突。所以建议:关掉原生验证(novalidate 属性),全由 JS 控制。
立即学习“Java免费学习笔记(深入)”;
真正难的不是写出正则,而是决定什么时候该用正则、什么时候该查接口、什么时候该让用户自己确认。比如身份证号,正则只能校验长度和末位校验码,但无法判断是否已注销或重复注册——那得调后端接口。
# javascript
# java
# js
# 前端
# 正则表达式
# 浏览器
# safari
# 后端
# ai
# 邮箱
# 为什么
相关文章:
html5框架怎么设置_HTML5用iframe或div框架集嵌子页面设结构【设置】
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
c++怎么操作postgresql数据库_c++ libpqxx连接与事务逻辑实现【实战】
OpenAI 人均股票薪酬达 150 万美元
Google入口在线地址详解_Google官网首页在线访问永久入口
CSS按需加载组件样式失败怎么办_media与link配合实现条件加载
曝iQOO 15 Ultra确定在春节前登场 搭载主动散热系统
Windows10系统怎么查看已安装更新_Win10控制面板卸载补丁
如何在Golang中使用net/smtp发送邮件_构建并发送邮件内容
教你用AI润色文章,让你的文字表达更专业
苏州:推广人工智能应用场景,对获国家支持的示范项目最高奖励 1000 万元
Python推荐系统高级项目教程_深度学习与协同过滤结合
小米17 Ultra上市首日销量曝光 徕卡版占比达50%
简历没回改:利用AI润色让你的文字更专业
Python并发异常传播_错误处理解析【教程】
得物卖家手续费怎么算_得物出售商品技术服务费与扣点细则
Python异步编程教程_asyncio协程与事件循环实践
如何使用Golang mock对象进行单元测试_模拟依赖接口行为
如何彻底阻止用户查看 JavaScript 源代码?——真相与实用防护策略
哈迪斯入门双流派全解 通关加点技巧分享
谷歌网页版入口怎么进_Google搜索引擎网页版首页入口地址
巨幕革命光影进化爱普生家庭影院双旗舰方案亮相广州音响展
抖音最新官方充值入口 抖音钻石2026官方最新充值入口
悟空浏览器极速版入口_无广告纯净上网体验
composer怎么发布私有包到Gitlab_利用Gitlab原生仓库管理依赖【指南】
如何在Golang中实现容器资源限制_保证系统稳定性
Windows10如何更改任务栏高度_Win10解除锁定调整大小
php时间怎么计算_strtotime函数计算时间差的应用【方法】
如何用豆包ai做SWOT分析_豆包ai快速生成个人或企业优劣势分析【指南】
Firefox Developer Edition开发者版本入口
相关栏目:
【
行业资讯17850 】
【
软件资源51899 】
【
网站技术89748 】
【
百度推广44206 】
【
网络营销84187 】
【
运营推广93002 】
【
AI优化91086 】
【
网络优化117696 】
【
网址导航107142 】





return;
}
});
