[C#]判断是否是合法的IP4,IP6地址

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

判断一个字符串如果没有端口的话,利用ipAddress.TryParse很好判断,那么有端口怎么判断呢,正则表达式?还是其他方式?

关键代码:

/// <summary>/// 判断是否是合法的IP4,IP6地址/// </summary>/// <param name="ip">需要判断的字符串</param>/// <returns>合法则返回host部分,若不合法则返回空</returns>publicstaticstringGetIPAddress(stringip)

{string_ipAddress =string.Empty;if(!string.IsNullOrEmpty(ip))

{

UriHostNameType _hostType = Uri.CheckHostName(ip);if(_hostType == UriHostNameType.Unknown)//譬如 "192.168.1.1:8060"或者[2001:0DB8:02de::0e13]:9010{

Uri _url;if(Uri.TryCreate(string.Format("http://{0}", ip), UriKind.Absolute,out_url))

{

_ipAddress = IPAddressTryParse(_url.Host);

}

}elseif(_hostType == UriHostNameType.IPv4 || _hostType == UriHostNameType.IPv6)

{

_ipAddress = IPAddressTryParse(ip);

}

}return_ipAddress;

}PRivatestaticstringIPAddressTryParse(stringip)

{string_ipAddress =string.Empty;

IPAddress _ipAdr;if(IPAddress.TryParse(ip,out_ipAdr))

{

_ipAddress = _ipAdr.ToString();

}return_ipAddress;

}

单元测试:

[TestMethod()]publicvoidGetIPAddressTest()

{string_ip4Address1 ="192.168.1.1";string_expected1 ="192.168.1.1";string_actual1 = NetWorkToolV2.GetIPAddress(_ip4Address1);

Assert.AreEqual(_expected1, _actual1);string_ip4Address2 ="192.168.1.1:8060";string_expected2 ="192.168.1.1";string_actual2 = NetWorkToolV2.GetIPAddress(_ip4Address2);

Assert.AreEqual(_expected2, _actual2);string_ip6Address3 ="2001:0DB8:02de::0e13";string_expected3 ="2001:DB8:2de::e13";string_actual3 = NetWorkToolV2.GetIPAddress(_ip6Address3);

Assert.AreEqual(_expected3, _actual3,true);string_ip6Address4 ="[2001:0DB8:2de::e13]:9010";string_expected4 ="2001:DB8:2de::e13";string_actual4 = NetWorkToolV2.GetIPAddress(_ip6Address4);

Assert.AreEqual(_expected4, _actual4,true);string_ipAddress5 ="erroriptest";string_expected5 =string.Empty;string_actual5 = NetWorkToolV2.GetIPAddress(_ipAddress5);

Assert.AreEqual(_expected5, _actual5);

}

测试结果:

希望有所帮助!

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航