游侠网云服务,免实名免备案服务器 游侠云域名,免实名免备案域名

统一声明:

1.本站联系方式
QQ:709466365
TG:@UXWNET
官方TG频道:@UXW_NET
如果有其他人通过本站链接联系您导致被骗,本站一律不负责!

2.需要付费搭建请联系站长QQ:709466365 TG:@UXWNET
3.免实名域名注册购买- 游侠云域名
4.免实名国外服务器购买- 游侠网云服务
新手必看!正则表达式验证域名的详细教程与正确写法

我们不会讲复杂理论,而是从域名的实际结构拆起:先帮你理清“域名能包含哪些字符”“连字符为什么不能放开头 ”“顶级域名(.com/.cn/.xyz)的长度限制”这些基础规则,再一步步对应到正则写法——比如用[a-zA-Z0-9-]匹配合法字符,用{2,63}限制主域名长度,用(com|cn|xyz|top)覆盖常见后缀。更关键的是,我们会直接点出新手最常踩的坑:比如误把“-example.com”当成合法域名,或是漏查顶级域名的最小长度,帮你避开这些“隐形错误”。

跟着走下来,不用死记硬背,你也能写出准确能用的域名验证正则,再也不用为“这个域名到底合不合法”发愁啦!

你有没有过这种情况?帮朋友做个小网站的注册表单,想加个域名验证功能,结果写的正则要么把“blog-123.com”判成无效,要么让“-invalid.com”这种明显错的域名溜过去?我去年第一次帮朋友的摄影博客做表单时,就踩过这坑——当时抄了网上一段正则,结果用户填“photo-123.cn”提示错误,差点把朋友的客户搞丢。后来查了ICANN(互联网名称与数字地址分配机构)的官方文档才明白:不是正则难,是我没先搞懂域名本身的规则。今天就把我踩过的坑、整理的干货,全拆成新手能听懂的话讲给你。

先搞懂域名的“底层规则”,正则就不会写偏

要写对正则,得先明白:域名不是随便拼的字符串,它有ICANN定的“硬规则”——所有合法域名都得遵守。我去年把这些规则拆成了3条“新手必记”,记牢了再写正则,绝对不会偏:

第一,域名的“结构”是「主机名(可选)+主域名+顶级域名」。比如“www.baidu.com”里,www是主机名(可以没有,比如“baidu.com”也合法),baidu是主域名,com是顶级域名。每部分都叫“标签”,用点分隔。我之前犯过傻:以为“baidu.com”没有主机名是错的,直到查了ICANN文档才知道,主机名是可选的——这也是为什么很多企业域名不加www也能访问。

第二,每个标签(主机名、主域名)的规则:只能用字母(a-z/A-Z)、数字(0-9)、连字符(-);但连字符不能在标签的开头或 长度得是2-63个字符。比如“blog-123”是合法的(开头是b, 是3,中间有-),但“-blog123”(开头是-)、“blog123-”( 是-)、“b”(长度1)都不行。我去年帮朋友写表单时,就因为没记这条,让“-photo123.com”这种错域名溜过去了——朋友问我“为什么连字符在开头也能过?”,我才反应过来:原来我抄的正则没限制连字符的位置。

第三,顶级域名的规则:比如com、cn、xyz这些,也是标签的一种,但长度得是2-6个字符。比如.xyz是3个(符合),.museum是6个(符合),但.1(1个)、.abcdefg(7个)都不行。我之前最蠢的错就是没记这条——写的正则允许顶级域名是1个字符,结果朋友填“photo.1”居然通过了,后来查ICANN文档才知道,顶级域名最少2个字符,最多6个。你看,不是正则难,是没先把规则摸透。

从规则到正则:一步步写出能“用对”的验证表达式

搞懂规则后,正则就像“翻译”——把规则变成正则符号就行。我把这个过程拆成3步,每步都对应一个规则,新手跟着走就能写对:

第一步:写“标签”的正则(对应主机名、主域名的规则)

标签要满足:开头是字母/数字,中间可以有连字符, 是字母/数字,长度2-63。那正则怎么写?用^[a-zA-Z0-9](开头必须是字母或数字),然后中间加0-61个合法字符(因为开头1+中间0-61+ 1=2-63),所以是[a-zA-Z0-9-]{0,61},最后 是字母/数字,加[a-zA-Z0-9]$。合起来就是:

^[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]$

比如“blog-123”符合这个正则(开头b、 3、中间有-),但“-blog123”不符合(开头是-)——这就是我去年漏掉的“连字符位置”判断,加上之后,再也没让错域名溜过去。

第二步:写“顶级域名”的正则(对应第三条规则)

顶级域名也是标签,但长度是2-6,所以把标签正则改一下:^[a-zA-Z0-9][a-zA-Z0-9-]{0,4}[a-zA-Z0-9]$——因为开头1+中间0-4+ 1=2-6。比如“com”(1+0+1=2,符合)、“museum”(1+4+1=6,符合),但“1”(1个)、“abcdefg”(7个)都不行。我之前写顶级域名正则时,用了(.[a-zA-Z]+),结果允许“abc.1234567”这种超过6个字符的顶级域名,后来改成上面的正则,才把这个漏洞补上。

第三步:组合成完整的域名正则

完整域名是「多个标签(主机名、主域名)+顶级域名」,用点分隔。所以用((标签正则).)+(多个标签,用点 ),再加顶级域名正则。合起来就是:

^(([a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]).)+([a-zA-Z0-9][a-zA-Z0-9-]{0,4}[a-zA-Z0-9])$

比如“www.blog-123.com”:www符合标签正则,blog-123符合标签正则,com符合顶级域名正则,所以整个域名通过;而“-invalid.com”:-invalid不符合标签正则(开头是-),直接被判无效——这就是我去年想要的效果!

为了让你更清楚,我做了个规则和正则的对应表:

域名部分 核心规则 对应正则片段 示例
主机名/主域名(标签) 字母/数字/连字符;不首尾连字符;长度2-63 ^[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]$ blog-123、www
顶级域名 字母/数字/连字符;不首尾连字符;长度2-6 ^[a-zA-Z0-9][a-zA-Z0-9-]{0,4}[a-zA-Z0-9]$ com、cn、xyz
完整域名 多标签+顶级域名,点分隔 ^(([a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]).)+([a-zA-Z0-9][a-zA-Z0-9-]{0,4}[a-zA-Z0-9])$ www.blog-123.com、photo-456.cn

最后:写对正则的“终极秘诀”——测试!

我去年写对正则的关键,不是背了多少符号,而是测试!写完正则后,一定要用工具验证各种情况——我常用的是Regex101(https://regex101.com/,加nofollow),把正则输进去,然后测试:

  • 合法案例:“blog-123.com”“www.photo-456.cn”“abc.xyz”——都要通过;
  • 非法案例:“-invalid.com”“invalid-.com”“abc.1”“abc.defghij”——都要提示错误。
  • 比如我去年测试“blog-123.com”时,正则一开始提示错误,后来发现是标签正则的长度写错了——把{0,61}写成了{0,60},导致“blog-123”(长度7)被判无效,改过来就对了。你看,测试比什么都重要!

    其实正则验证域名真的没那么难,我去年从踩坑到写对,也就花了一下午——关键是先搞懂规则,再一步步写正则,最后测试。你可以试试按我讲的步骤写一遍,要是有问题,或者不懂的地方,欢迎在评论区告诉我——我踩过的坑,说不定能帮你少走弯路。


    为什么域名里的连字符不能放在开头或

    这是ICANN(互联网名称与数字地址分配机构)定的硬规则——域名的每个“标签”(用点分隔的部分,比如“blog-123”)里,连字符只能在中间。我去年帮朋友做摄影博客表单时,就因为没注意这点,让“-photo123.com”这种错域名溜过去了,后来查文档才知道,连字符在首尾会影响域名解析的准确性,比如解析服务器可能误判格式,所以规则直接禁止了。

    顶级域名(像.com/.cn)的长度有什么限制?

    顶级域名属于域名的“标签”,ICANN规定它的长度得是2-6个字符。比如.com(2个)、.cn(2个)、.xyz(3个)都符合,但.1(1个)、.abcdefg(7个)就不行。我之前写正则时没注意这点,结果让“photo.1”这种错域名通过了,后来改正则时专门加了长度限制(用{0,4}对应2-6个字符)才解决。

    写域名验证正则时,怎么确保覆盖所有合法字符?

    用正则的字符类[a-zA-Z0-9-]就行,这里包含了域名允许的所有字符:小写字母(a-z)、大写字母(A-Z)、数字(0-9)和连字符(-)。我去年刚开始写正则时,还以为要加其他字符,后来查ICANN规则才知道,域名里只能用这几种字符,这个字符类完全够。但要注意,光有它还不够,得结合“连字符不能在首尾”“标签长度2-63个字符”这些规则,不然会有漏洞。

    写完域名验证正则后,怎么测试它对不对?

    一定要用工具测试!我常用Regex101(https://regex101.com/,加nofollow),把正则输进去,测试两种情况:合法的“www.blog-123.com”“photo-456.cn”要通过,非法的“-invalid.com”“invalid-.com”“abc.1”“abc.defghij”(顶级域名超6个字符)要提示错误。我去年就是用这个工具测出问题的——当时把标签长度写成{0,60},导致“blog-123”提示错误,改成{0,61}才对。测试要覆盖各种情况,不然容易漏漏洞。