3

寻找主机名验证正则表达式。

匹配 DNS 主机名或 IP 地址的正则表达式?

在那个链接中,先生们提出了一个不错的正则表达式。我对此有一些问题/疑问:

  • 在 Windows 计算机/网络1abcd上,允许使用类似名称(在我们的本地网络上验证)
  • 在建议的正则表达式中,点可能只出现一次。我认为这abc.def.gh也是一个有效的主机名,不是吗。

奇怪,但也找不到任何可以验证主机名字符串的 .NET 类(是这种情况吗?)。任何建议将不胜感激。

更新:对于任何类/方法建议 - 请提出一些适用于 .NET/C# 和 SilverLight 的建议。

4

3 回答 3

3

Uri.CheckHostName是一种可以帮助您的方法吗?如果无法识别主机名,则结果将为"Unknown"

于 2011-01-10T09:15:44.367 回答
3

在建议的正则表达式中,点可能只出现一次。我假设 abc.def.gh 也是一个有效的主机名,不是吗。

点可能出现不止一次。在这里测试正则表达式,你会看到它匹配。

正则表达式的相关片段(第一部分是):

([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*

在 Windows 计算机/网络上,允许使用 1abcd 等名称(在我们的本地网络上验证)

来自维基百科

RFC 952中主机名的原始规范要求标签不能以数字或连字符开头,也不能以连字符结尾。但是,后续规范 ( RFC 1123 ) 允许主机名标签以数字开头。

我提到了RFC 952。我将尝试更新主机名的正则表达式以符合RFC 1123

于 2011-01-14T12:08:49.070 回答
0

(?i)(?=.{5,20}$)^(([a-z\d]|[a-z\d][a-z\d\-]*[a-z\d])\.)*([a-z\d]|[a-z\d][a-z\d\-]*[a-z\d])$

解释:

(?i) - 忽略大小写

(?=.{5,20}$) - 将字符串长度限制在 5 到 20 个字符内。

^(([a-z\d]|[a-z\d][a-z\d\-]*[a-z\d])\.)*([a-z\d]|[a-z\d][a-z\d\-]*[a-z\d])$ - 接受任何字母和数字以及连字符和点

于 2016-06-28T08:34:53.847 回答