(悬念式开头)
老铁们,是不是经常被网站提示"域名格式错误"整懵了?上周我表弟做毕业设计,死活调不通用户注册功能,最后发现是域名验证的正则写岔了!今天咱们就手把手教你们用JS正则表达式驯服域名验证这头猛兽,保准你学完就能写出老板挑不出刺的代码!
一、基础认知扫雷区
先搞懂域名长啥样
一个正经域名就像汉堡包,分三层:
- 协议层:http/https(就像面包片)
- 主料层:http://www.xxx.com(中间的肉饼)
- 配料层:端口、路径、参数(酸黄瓜和酱料)
这里有个冷知识:".io"这类新潮后缀现在也能用正则验证了!
为啥非得用正则?
好比超市扫码器,正则就是专门识别域名格式的激光枪!它能:
- 拦截乱输入:把"微XIN公众号"这种中文域名挡在门外
- 防SQL注入:识别"';DROP TABLE"这种危险字符
- 统一格式:让"WWW.XXX.COM"和"http://www.xxx.com"都通过
二、手把手教学时间
第一步:搭框架
基础版正则长这样:
javascript**const domainRegex = /^(https?:\/\/)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/;
拆开看就像乐高积木:
^
和$
是左右围墙,防止乱入字符(https?:\/\/)?
匹配http或https开头(带问号表示可省略)[a-zA-Z0-9-]+
允许字母、数字、短横线[a-zA-Z]{2,}
保证顶级域名至少俩字母
避坑指南:
- 别用
\w
偷懒,它会放行下划线_
这个非法字符 - 顶级域名长度要≥2,不然".c"这种妖魔鬼怪也能混进来
第二步:加料升级
要处理带端口或路径的复杂域名,得这么改:
javascript**const proRegex = /^(https?:\/\/)?([a-z0-9-]+\.)+[a-z]{2,}(:\d+)?(\/[\w-]*)*(\?[^#]*)?$/;
新增功能:
:\d+
匹配:8080这种端口\/[\w-]*
识别路径如/about-us\?[^#]*
抓取?name=张三这种参数
测试小技巧:
用regex101.com在线调试,实时看匹配结果,比console.log快10倍!
三、常见翻车现场
车祸1:双胞胎点号
输入"http://www..example.com"居然通过了?赶紧补上这个补丁:
javascript**/([a-z0-9-]+\.){2,}[a-z]{2,}/ //禁止连续两个点
车祸2:中文域名
要支持"腾讯.中国"这种域名,得请出Unicode**:
javascript**/^([\u4e00-\u9fa5]+\.)+[\u4e00-\u9fa5]{2,}$/
但注意:中文域名必须转码成xn--开头才能用
车祸3:IP地址伪装
有些老六会把域名写成192.168.1.1,得单独加验证规则:
javascript**const ipRegex = /^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$```---### 四、灵魂拷问环节**Q:正则写对了为啥还是报错?**A:八成是大小写搞事!试试这两招:1. 在正则最后加`i`标志忽略大小写 → `/.../i`2. 用`toLowerCase()`统一转小写**Q:怎么防止用户输www.**com这种智障操作?**A:加个边界检查!把`([a-z0-9-]+\.)`改成`([a-z0-9-]+)\.`,让点号必须跟在有效字符后**Q:要兼容.app这种4字母后缀咋整?**A:把`{2,}`改成`{2}`,现在最长支持".museum"这种后缀[5](@ref)---### 八年码农的碎碎念最近发现个新套路:有人用正则漏洞注册`google-login.com`这种钓鱼域名!所以验证时记得:1. **黑名单过滤**:把"login"、"support"等敏感词加进去2. **长度限制**:主域名别超过63字符[5](@ref)3. **实时查WHOIS**:用接口验证域名归属最后说句掏心窝的话:2025年了还在用`indexOf`判断域名的,就像用算盘打LOL——不是不行,是容易挨揍!赶紧把这套正则模板存进收藏夹,关键时刻项目一命!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。