如何让正则仅匹配含单个点的SLD+TLD格式域名?
修正域名匹配正则,限制仅单个点
你当前的正则只是允许字母、数字、点、连字符组成3-63长度的字符串,没限制点的数量,所以会匹配多个点的无效域名。要精准匹配仅含二级域名(SLD)和顶级域名(TLD)的单点点域名,需要把正则拆成「合法SLD+单个点+合法TLD」的结构,同时保证整体长度合规。
修正后的正则表达式
var re = new RegExp("^(?=.{3,63}$)[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?$");
各部分规则说明
(?=.{3,63}$):正向预查,确保整个域名总长度在3-63字符之间,符合域名长度规范。[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?:匹配合法的SLD或TLD:- 开头必须是字母/数字,不能用连字符或点;
- 中间可包含字母、数字、连字符;
- 结尾必须是字母/数字,避免以连字符收尾;
- 支持单字符的SLD或TLD(比如
a.com、example.a)。
\\.:转义后的点,强制整个域名中仅存在一个点。
测试效果
- 匹配合法域名:
mozilla.com、my-site.net、123.xyz、a.b - 拦截无效域名:
mozzila....net(多个点)、.com(开头是点)、example.(结尾是点)、-test.com(SLD以连字符开头)、test-.com(SLD以连字符结尾)、长度超63的超长域名
内容的提问来源于stack exchange,提问作者Rado
相关产品推荐
相关产品推荐

