在 C# 和 Javascript 中验证 FQDN 的正则表达式
Posted
技术标签:
【中文标题】在 C# 和 Javascript 中验证 FQDN 的正则表达式【英文标题】:Regular expression to validate FQDN in C# and Javascript 【发布时间】:2013-08-01 22:08:20 【问题描述】:在 C# 和 javascript 中验证 FQDN 的正确正则表达式是什么? 我一直在四处寻找,我发现了不同的规格。哪个是正确的。
我发现的几个例子:
1.(?=^.1,254$)(^(?:(?!\d+\.|-)[a-zA-Z0-9_\-]1,63(?<!-)\.?)+(?:[a-zA-Z]2,)$)
2. (?=^.1,254$)(^(?:(?!\d|-)[a-zA-Z0-9\-]1,63(?<!-)\.?)+(?:[a-zA-Z]2,)$)
3. \b((?=[a-z0-9-]1,63\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]2,63\b
(Regular Expression cook book)
请帮忙
【问题讨论】:
RFC 1035, blog.gnukai.com/2010/06/fqdn-regular-expression @Andreas:谢谢你。我见过这个。他说:“我对 RFC 规则的唯一偏差是额外的规则,即***域(最后一个 '.' 之后的部分)只能是字符,并且必须是 2 个或更多(.com, . net, .org, .eu, .uk, 等)。但我找不到记录在哪里。”不确定这是否正确。 来自RFC 920 - TLD 要求:ARPA、GOV、EDU、COM、MIL、ORG 或英文两字母国家代码。所以这似乎是一个有效的扩展/修改。 @Anders :我应该做些什么改变才能在 Javascript 中使用它。我尝试了以下 -> var fqdnRegEx = /(?=^.1,254$)(^(?:(?!\d+\.|-)[a-zA-Z0-9_\-]1,63 (? @Andreas 多年后回想起来,感觉已经很古老了 【参考方案1】:一般来说,正则表达式食谱是一个很好的信息来源,由两位正则表达式专家编写,所以您应该从那里开始。那里概述的解决方案还不能完全适应您的需求(它不会验证整个字符串但会匹配子字符串,并且不会检查字符串的总长度),因此我们可以对其进行一些修改:
/^(?=.1,254$)((?=[a-z0-9-]1,63\.)(xn--+)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]2,63$/i
解释:
^ # Start of string
(?=.1,254$) # Assert length of string: 1-254 characters
( # Match the following group (domain name segment):
(?=[a-z0-9-]1,63\.) # Assert length of group: 1-63 characters
(xn--+)? # Allow punycode notation (at least two dashes)
[a-z0-9]+ # Match letters/digits
(-[a-z0-9]+)* # optionally followed by dash-separated letters/digits
\. # followed by a dot.
)+ # Repeat this as needed (at least one match is required)
[a-z]2,63 # Match the TLD (at least 2 characters)
$ # End of string
【讨论】:
感谢您的回答。这行得通。请让我知道我可以参考哪些资源来查找 FQDN 上的规则,以便我可以进行更多测试? 上面的cmets中有一些RFC的链接;不过,这些文件相当复杂。也许en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names 有帮助? xn----dtbjjdcfhg5cckn1k9a.xn--p1ai 尝试...并获得“假”。 @tim 破折号应该允许在初始xn--
之后。如果 TLD 是 punycode,则 TLD 中可能允许使用数字。正如上面的用户所说,xn----dtbjjdcfhg5cckn1k9a.xn--p1ai 是一个真实的主机名。以上是关于在 C# 和 Javascript 中验证 FQDN 的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
c# javascript mvc - 模型验证后出现 Javascript window.confirm 框集