Rya*_*yan 18 php regex preg-match
我想要一个解决方案只验证域名不是完整的URL,以下示例是我正在寻找的:
domain.com -> true
domain.net -> true
domain.org -> true
domain.biz -> true
domain.co.uk -> true
sub.domain.com -> true
domain.com/folder -> false
domµ*$ain.com -> false
Run Code Online (Sandbox Code Playgroud)
谢谢
Onu*_*rım 74
所选答案不完整/错误.
正则表达式;
不应该验证领域,如:
-domain.com,domain--.com,-domain-.-.com,domain.000,等...
要验证域名如:
schools.k12,newTLD.clothing,good.photography,等...
经过一番深入研究; 下面是我能提出的最正确,跨语言和紧凑的模式:
^(?!\-)(?:[a-zA-Z\d\-]{0,62}[a-zA-Z\d]\.){1,126}(?!\d+)[a-zA-Z\d]{1,63}$
Run Code Online (Sandbox Code Playgroud)
此模式符合规范中定义的大多数*规则:
注1:正则表达式中不包含完整域长度检查.它应该通过原生方法进行简单检查,例如strlen(domain) <= 253.
注2:此模式适用于大多数语言,包括PHP,Javascript,Python等...
请参阅此处的DEMO(适用于JS,PHP,Python)
上面的正则表达式不支持IDN.
没有规范说扩展名(TLD)应该在2到6个字符之间.它实际上支持63个字符.请在此处查看当前的TLD列表.此外,一些网络在内部使用自定义/伪TLD.
注册机构可能会施加一些额外的特定规则,这些规则在此正则表达式中未明确支持.例如,.CO.UK并且.ORG.UK必须至少包含3个字符,但少于23个字符,不包括扩展名.这些规则是非标准的,可能会有变化.如果您无法维护,请不要实施它们.
正则表达式很棒但不是解决每个问题的最有效,最高效的解决方案.因此,应尽可能使用本机URL解析器.例如Python的urlparse()方法或PHP的parse_url()方法......
毕竟,这只是一种格式验证.正则表达式测试不确认域名实际配置/存在!您应该通过提出请求来测试存在.
zil*_*n01 23
怎么样:
^(?:[-A-Za-z0-9]+\.)+[A-Za-z]{2,6}$
Run Code Online (Sandbox Code Playgroud)