JS正则域名验证到底怎么玩?新手看完就会!

速达网络 域名知识 3

(悬念式开头)
老铁们,是不是经常被网站提示"域名格式错误"整懵了?上周我表弟做毕业设计,死活调不通用户注册功能,最后发现是域名验证的正则写岔了!今天咱们就手把手教你们用​​JS正则表达式​​驯服域名验证这头猛兽,保准你学完就能写出老板挑不出刺的代码!


一、基础认知扫雷区

JS正则域名验证到底怎么玩?新手看完就会!-第1张图片

​先搞懂域名长啥样​
一个正经域名就像汉堡包,分三层:

  1. ​协议层​​:http/https(就像面包片)
  2. ​主料层​​:http://www.xxx.com(中间的肉饼)
  3. ​配料层​​:端口、路径、参数(酸黄瓜和酱料)

这里有个​​冷知识​​:".io"这类新潮后缀现在也能用正则验证了!

​为啥非得用正则?​
好比超市扫码器,正则就是专门识别域名格式的激光枪!它能:

  • ​拦截乱输入​​:把"微XIN公众号"这种中文域名挡在门外
  • ​防SQL注入​​:识别"';DROP TABLE"这种危险字符
  • ​统一格式​​:让"WWW.XXX.COM"和"http://www.xxx.com"都通过

二、手把手教学时间

第一步:搭框架

基础版正则长这样:

javascript**
const domainRegex = /^(https?:\/\/)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/;

拆开看就像乐高积木:

  1. ^$ 是左右围墙,防止乱入字符
  2. (https?:\/\/)? 匹配http或https开头(带问号表示可省略)
  3. [a-zA-Z0-9-]+ 允许字母、数字、短横线
  4. [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——不是不行,是容易挨揍!赶紧把这套正则模板存进收藏夹,关键时刻项目一命!

标签: 正则 验证 到底