首页 关于我们 成功案例 网络营销 电商设计 新闻中心 联系方式
QQ联系
电话联系
手机联系
QQ联系
电话联系
手机联系

如何用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