博主在写短网址的时候,想让用户可以使用自己的域名,这得做个验证,总不能什么东西都能提交~

遂手撕了如下正则:

^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$

这个正则可以匹配:

1、子域名:也就是 sub.example.com

2、根域名:也就是example.com

解析

1、^(?: ... )+$:整个正则表达式的开始和结束,确保匹配整个字符串。

2、[a-zA-Z0-9]:域名的字符必须以字母或数字开头。

3、(?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?:后续字符可以是字母、数字或短横线,短横线不能出现在开始或结束的位置,且最大长度为63个字符(这是域名的一部分长度限制)。

4、\.:点(.)用来分隔不同的域名部分。

5、[a-zA-Z]{2,}:顶级域名部分,必须至少由两个字母组成(例如 .com.cn.net.jp)。

需要注意的是

1、域名的长度我没做判断,最长应该是253个字符

2、连接线(-)的话不应该出现在开头或结尾,这个我没想出来该怎么写=_=