是否有一个快速和肮脏的方式,如果正确的FQDN已输入验证? 请记住,没有DNS服务器或Internet连接,所以确认必须通过正则表达式/ AWK / SED完成。
有任何想法吗?
是否有一个快速和肮脏的方式,如果正确的FQDN已输入验证? 请记住,没有DNS服务器或Internet连接,所以确认必须通过正则表达式/ AWK / SED完成。
有任何想法吗?
这是很难如今,随着国际化域名和几千个(!)新TLD。
最简单的是,你还可以拆分的部件“”
你需要可注册顶级域名的列表。 有该站点:
https://publicsuffix.org/list/effective_tld_names.dat
你只需要检查ICANN认可的。 请注意,登记的TLD可以有多个组件,如“co.uk”。
再有就是IDN和Punycode的形式显示。 域是Unicode的了。 例如,
“XN - nnx388a” 等同于 “台湾”。 这两个都是有效的顶级域名,顺便说一句。
对于Punycode转码的代码,请参阅“ http://golang.org/src/pkg/net/http/cookiejar/punycode.go ”。
检查每个域成分的语法有新规定了。 参见RFC5890在http://tools.ietf.org/html/rfc5890
组件可以是A-标签(ASCII仅)或Unicode。 ASCII标签无论是沿袭旧的语法,或开始“后的xn”,在这种情况下,他们是一个Unicode字符串的使用Punycode版本。
对Unicode的规则是非常复杂的,并且在RFC5890中给出。 该规则旨在防止这样的事情由左到右,右到左的两组混合字符。
对不起有没有简单的答案。
(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63}$)
正则表达式是始终将是最好的事情是这样的近似,并且规则随着时间的推移而改变。 上述正则表达式是在心中用下面的书面和特定于主机名 -
主机名是由一系列用点连接在一起的标签。 每个标签是1〜63个字符长,并且可以包含:
另外:
一些假设:
结果:有效/无效
编辑:约翰·里克斯所提供的正则表达式的替代黑客,使可选一个TLD的规格:
(?=^.{1,253}$)(^(((?!-)[a-zA-Z0-9-]{1,63}(?<!-))|((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63})$)
编辑2:有人问,在JS工作的版本。 它不JS工作的原因是因为JS不支持正则表达式后面看。 具体而言,代码(?<!-)
-它指定前一个字符不能是一个连字符。
有点丑陋,但没有太大的 - 反正这里是没有回顾后重写
(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{0,62}[a-zA-Z0-9]\.)+[a-zA-Z]{2,63}$)
你同样可以让约翰·里克斯的版本类似的替代品。
编辑3:如果你要允许小圆点 - 这在技术上是允许的:
(?=^.{4,253}$)(^((?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)+[a-zA-Z]{2,63}\.?$)
我不熟悉尾随点语法,直到@ChaimKut指出出来,我做了一些研究
使用小圆点但是似乎导致我合作过的各种工具有些不可预知的结果,所以我会建议一些谨慎。
这正则表达式是你想要什么:
(?=^.{1,254}$)(^(?:(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$)
它符合你的榜样域(groupa-zone1appserver.example.com或cod.eu等...)
我会试着解释:
(?=^.{1,254}$)
匹配的域名(可以与任何字符开头)是很早以前1和254字符之间,也可能是还5254,如果我们假设co.uk是最小长度。
(^
开始比赛
(?:
定义一个匹配组
(?!\d+\.)
的域名不应该由数字组成,所以1234.co.uk或abc.123.uk是不能接受的,而1a.ko.uk肯定。
[a-zA-Z0-9_\-]
的域名应该由词语仅用-ZA-Z0-9_-组成
{1,63}
的任何域级的长度是最大63字符,(也可能是2,63)
+
和
(?:[a-zA-Z]{2,})$)
域名的最后部分不应被随后的任何其它的字,并且必须由至少2炭A-ZA-Z的一个字的
审议#1:
请注意,由于在RFC-2181的DNS标签宽松的要求可以由符号(然而,长度的限制仍然存在)的几乎任意组合:
“ 任何可作为任何资源记录的标签的任何二进制字符串。DNS协议的实现必须不放置任何限制,可以使用的标签。尤其是,DNS服务器必须不拒绝服务的区域,因为它包含的标签这是无法令人接受一些DNS客户端程序。“( https://tools.ietf.org/html/rfc2181#section-11 )
审议#2:
“有,基本上需要顶级域名不是全数字的附加规则”( https://tools.ietf.org/html/rfc3696#section-2 )
考虑到这两个因素,正确的正则表达式如下:
/^(?!:\/\/)(?=.{1,255}$)((.{1,63}\.){1,127}(?![0-9]*$)[a-z0-9-]+\.?)$/i
观看演示@ http://regexr.com/3g5j0
下面的表达式
(^((?=^.{4,253}$)(((http){0,1}|(http){0,1}|(ftp){0,1}|(ws){0,1})(s{0,1}):\/\/){0,1})((((?!-)[\pL0-9\-]{1,63})(?<!-)(\.)){1,})(((?!-)[a-z0-9\-]{1,63})(?<!-)((\/{0,1}[\pL\pN?=\-]*)+){1})$)
将匹配
https://www.tes1t.com/lets/to?878932572
https://www.test.co.uk/lets/to?878932572
http://www.test.com/lets/to?878932572
http://www.test.co.uk/lets/to?878932572
ftp://www.test.com/lets/to?878932572
subdomain.test.com/lets/to?878932572
subdomain.test.com/lets/to?878932572
subdomain.subdomain.test.net/lets/to?878932572
sub-domain.test.net/lets/to?878932572
sub-domain.test.net/lets-go/to?878932572
www.test.net/lets/to?878932572
www.test-test.com/
www.test-test.com
subdomain.subdomainsubdomainsuèdomainsubdomainsubdomainsubdomainsubdomain.net/let2s/to?=878932572
www.test-test.co.uk
http://www.test-test-.com/test
www.test-teèst.co.uk/lets
www.test-test.co.uk/lets/
www.test-test.co.uk/lets/to?
test-test.co.uk/lets/to?
test-test.co.uk/lets/
test-test.co.uk/lets
test-test.co.uk
http://test.com/lets/to?878932572
https://test.com/lets/to?878932572
ftp://test.com/lets/to?878932572
ftps://test.com/lets/to?878932572
ws://test.com/lets/to?878932572aa
wss://test.com/lets/to?=878932572bar
test.com
subdomain.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.test.khbdomainsubdomainsubdomain.test.net/lets/to?87893257
但不匹配:
www.-test-fail-.com
www.-test-fail.com
-test-fail.com
test-fail-.com
subdomain.subdomainsubdomainsubdomainsubdomainsubdomainsubdomainsubdomainsubdomainsubdomainsubdomainubdomainsubdomainsubdomain.test.net/lets/to?878932572
subdomain.subdomainsubdomainsubdcnvcnvcnofhfhghgfhvnhj-mainsubdomainsubdohhghghghfhgffgjh-gfhfdhfdghmainsubdocgvhngvnbnbmghghghaihgfjgfnfhfdghgsufghgghghhdfjgffsgfbdomainsubdomainsubdomainsubdomainsubdomainsubdomainsubdomain.test.net/lets/to?878932572
subdomain.test.test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test..test.khbdomainsubdomainsubdomain.test.net/lets/to?87893257