2012-12-26 45 views
0

是否有一種靜態方法可用於解析字符串以檢查它是否爲IP地址,而不必初始化新的System.Net.IPAddress實例?使用靜態方法從字符串解析IP地址

這就是我想實現

System.Net.IPAddress throwawayIpAddress = new System.Net.IPAddress(Encoding.ASCII.GetBytes("127.0.0.1")); 

System.Net.IPAddress.TryParse(baseUri.Host, out throwawayIpAddress); 

baseUri是一個Uri變量,Hoststring。我在尋找的東西簡單,比如:

System.Net.IPAddress.TryParse(baseUri.Host, out new System.Net.IPAddress(Encoding.ASCII.GetBytes("127.0.0.1")); 

由於事實TryParse()方法需要Stringout IPAddress參考,我不能通過null或直接暴殄天物對象。

以更簡單的方式分析字符串來測試您的建議是否爲IP地址。

+0

語言錯誤 - 因爲throwawayIpAddress用作OUT,沒有必要對其進行初始化。這實際上應該會引發一些警告。只需將其設置爲「null」,而不是新的.... IpAddress。這是一個OUT參數,無論如何它都會被覆蓋掉。我相當肯定你會得到一個警告,甚至是一個錯誤,但是,使用已經初始化的變量作爲out參數。 – TomTom

回答

1

IPAddress.TryParse需要和輸出參數。該參數不需要初始化。 對於你的代碼可以這樣:

System.Net.IPAddress throwawayIpAddress; //No need to initialize it 
if(System.Net.IPAddress.TryParse(baseUri.Host, out throwawayIpAddress)) 
{ 
//valid IP address 
} 
{ 
//Invalid IP address 
} 

如果解析成功,那麼你的對象throwawayIpAddress將有有效的IP地址,你可以在代碼中進一步使用它,或者如果你想忽略它。

4
public static bool IsValidIpAddress(this string s) 
{ 
    IPAddress dummy; 
    return IPAddress.TryParse(s, out dummy); 
} 
1

你可以使用正則表達式

var isValidIP = Regex.IsMatch(stringValue, @"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$")