[C#]判断是否是合法的IP4,IP6地址
判断一个字符串如果没有端口的话,利用IPAddress.TryParse很好判断,那么有端口怎么判断呢,正则表达式?还是其他方式?
关键代码:
/// <summary>
/// 判断是否是合法的IP4,IP6地址
/// </summary>
/// <param name="ip">需要判断的字符串</param>
/// <returns>合法则返回host部分,若不合法则返回空</returns>
public static string GetIPAddress(string ip)
{
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);
}
}
else if (_hostType == UriHostNameType.IPv4 || _hostType == UriHostNameType.IPv6)
{
_ipAddress = IPAddressTryParse(ip);
}
}
return _ipAddress;
}
private static string IPAddressTryParse(string ip)
{
string _ipAddress = string.Empty;
IPAddress _ipAdr;
if (IPAddress.TryParse(ip, out _ipAdr))
{
_ipAddress = _ipAdr.ToString();
}
return _ipAddress;
}
单元测试:
[TestMethod()]
public void GetIPAddressTest()
{
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);
}
测试结果:

希望有所帮助!
[C#]判断是否是合法的IP4,IP6地址的更多相关文章
- C#检查字符串是否是合法的HTTP URL地址的代码
在研发过程,把开发过程较好的一些内容片段记录起来,下面的内容是关于C#检查字符串是否是合法的HTTP URL地址的内容,应该是对各位有较大用处. protected string HTTPChecke ...
- python学习-判断是否是私网IP地址
判断是否是私网IP地址 私网IP地址范围如下: 192.168.0.0-192.168.255.255 172.16.0.0-172.31.255.255 10.0.0.0-10.255.255.25 ...
- c#判断是否为合法的email地址
题目要求: class Program { static void Main(string[] args) { Console.WriteLine("请输入正确的邮箱地址,以 @sina.c ...
- 判断是否是合法的IP地址
ipv4 import re #简单的匹配给定的字符串是否是ip地址,下面的例子它不是IPv4的地址,但是它满足正则表达式 if re.match(r"^(?:[0-9]{1,3}\.){3 ...
- Asp.net中的一个判断session是否合法的做法
1 if (Session["UserID"] == "" || Session["UserID"] == null) 2 { 3 ...
- 判断是否是有效的IPV4地址
参考链接: https://blogs.msdn.microsoft.com/oldnewthing/20060522-08/?p=31113 http://www.cnblogs.com/txw19 ...
- 解决ios开发中不合法的网络请求地址
NSString *const kWebsite = @"http://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct ...
- js判断非127开头的IP地址
js验证回送地址,IP地址不能以127开头 回送地址(127.x.x.x)是本机回送地址(Loopback Address) var ipNotStartWith127 = function(ip) ...
- Solidity的地址 数组如何判断是否包含一个给定的地址?
Q: given address[] wallets. What is the correct method to check that the list contains a given addre ...
随机推荐
- BAE3.0还不支持本地写入文件
BAE3.0对比2.0做了很大的改动,对于安装应用方面也方便了很多,普通的应用表面上(下文就是讲为什么说表面上)不需要做什么适配.比如wp博客,直接修改wp-config.php,把数据库信息填一下就 ...
- Xdebug+phpstorm配置
首先,把自己参考的网上材料的连接黏贴出来,是英文的,但是讲解的很详细,有兴趣的同学可以看一下. 1.http://blog.jetbrains.com/webide/2011/02/zero-conf ...
- log_slave_updates在线修改
http://planet.mysql.com/entry/?id=20450 mysql> show variables like 'log_slave_updates'; +-------- ...
- epoll讲解
首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象. 不管是文件,还是套接字,还是管道,我们都可以把他们看作流. 之后我们来讨论I ...
- What Influences Method Call Performance in Java?--reference
reference from:https://www.voxxed.com/blog/2015/02/too-fast-too-megamorphic-what-influences-method-c ...
- JVMInternals--reference
This article explains the internal architecture of the Java Virtual Machine (JVM). The following dia ...
- xss脚本攻击
xss脚本攻击不仅仅只是alert(1)就算完了,xss脚本攻击真正的用处是盗取普通用户的cookie,或者盗取管理员的cookie. xss分类(类型): 1. 反射型xss2. 存储型xss3. ...
- linux系统安装对硬件有什么要求
Linux系统对你的硬件要求不是很高,你可以参照你的系统上面的参数进行对照,Linux系统的初衷就是以最低的配置完成最高的性能,随意,现在的计算机都可以安装这个系统的,你不要顾虑多了,但是分区你不用系 ...
- Office365 InfoPath 表单的设计和应用(原创)
表单的应用:我想到的有2种. 1 做为自定义表单库的模版. 通过发放url(模版链接)给用户来填写表单. 最后将在表单库中得到所有填写的信息列表. 如 2 上传表单做为ContentType 也就是自 ...
- 20160510--hibernate懒加载问题
懒加载 通过asm和cglib二个包实现:Domain是非final的. 1.session.load懒加载. 2.one-to-one(元素)懒加载: 必需同时满足下面三个条件时才能实现懒加载 (主 ...