2011-01-10 94 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])$ - 接受任何字母和數字用連字符和點沿