寻找主机名/机器名验证的正则表达式/代码

时间:2011-01-10 09:07:07

标签: .net silverlight-4.0 network-programming dns hostname

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

Regular expression to match DNS hostname or IP Address?

在那个链接中,男士们提出了一个体面的正则表达式。我有一些问题/疑问:

  • 在Windows计算机/网络名称上 像1abcd一样被允许(经过验证) 我们的本地网络)
  • 在提议的正则表达式中,点可能只出现一次。我假设 abc.def.gh是有效的主机名 同样,不是吗。

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

更新:对于任何类/方法提案 - 请提供一些适用于.NET / C#和SilverLight的内容。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

  

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

点可能出现不止一次。测试正则表达式here,您将看到它匹配。

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

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

在Windows计算机/网络名称上   像1abcd一样被允许(验证   我们的本地网络)

来自wikipedia

  

原始规格   RFC 952中的主机名,强制要求   标签不能以数字或数字开头   用连字符,一定不能以   连字符。但是,随后   规范(RFC 1123)允许   主机名标签以数字开头。

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

答案 2 :(得分: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])$ - 接受任何字母和数字以及连字符和点