2011-01-10 82 views
3

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

Regular expression to match DNS hostname or IP Address?

在该链接先生提出了一个像样的正则表达式。我有一个几个问题/问题:

  • 在Windows计算机/网络名称 像1abcd允许
  • (上 本地网络验证)在建议的正则表达式的点可能会出现一次。我假设 abc.def.gh是一个有效的主机名称 以及,不是。

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

更新:对于任何类/方法的建议 - 请建议一些在.NET/C#和SilverLight中都可以使用的东西。

回答

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

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

+0

该方法的名称看起来前途无量我到今天早上。然而,像“9999999”这样的名字通过了(他们应该吗?)。像“1.3”这样的名字也会通过(应该他们?)。 – BreakPhreak 2011-01-10 09:26:08

+1

根据我在[wikipedia](http://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names)中的理解,它似乎是有效的主机名称 – kerrubin 2011-01-10 09:33:09

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])$ - 接受任何字母和数字用连字符和点沿