2012-12-26 52 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]?)$")