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

关键代码:

  1. /// <summary>
  2. /// 判断是否是合法的IP4,IP6地址
  3. /// </summary>
  4. /// <param name="ip">需要判断的字符串</param>
  5. /// <returns>合法则返回host部分,若不合法则返回空</returns>
  6. public static string GetIPAddress(string ip)
  7. {
  8. string _ipAddress = string.Empty;
  9. if (!string.IsNullOrEmpty(ip))
  10. {
  11. UriHostNameType _hostType = Uri.CheckHostName(ip);
  12. if (_hostType == UriHostNameType.Unknown)//譬如 "192.168.1.1:8060"或者[2001:0DB8:02de::0e13]:9010
  13. {
  14. Uri _url;
  15. if (Uri.TryCreate(string.Format("http://{0}", ip), UriKind.Absolute, out _url))
  16. {
  17. _ipAddress = IPAddressTryParse(_url.Host);
  18. }
  19. }
  20. else if (_hostType == UriHostNameType.IPv4 || _hostType == UriHostNameType.IPv6)
  21. {
  22. _ipAddress = IPAddressTryParse(ip);
  23. }
  24. }
  25. return _ipAddress;
  26. }
  27. private static string IPAddressTryParse(string ip)
  28. {
  29. string _ipAddress = string.Empty;
  30. IPAddress _ipAdr;
  31. if (IPAddress.TryParse(ip, out _ipAdr))
  32. {
  33. _ipAddress = _ipAdr.ToString();
  34. }
  35. return _ipAddress;
  36. }

单元测试:

  1. [TestMethod()]
  2. public void GetIPAddressTest()
  3. {
  4. string _ip4Address1 = "192.168.1.1";
  5. string _expected1 = "192.168.1.1";
  6. string _actual1 = NetWorkToolV2.GetIPAddress(_ip4Address1);
  7. Assert.AreEqual(_expected1, _actual1);
  8.  
  9. string _ip4Address2 = "192.168.1.1:8060";
  10. string _expected2 = "192.168.1.1";
  11. string _actual2 = NetWorkToolV2.GetIPAddress(_ip4Address2);
  12. Assert.AreEqual(_expected2, _actual2);
  13.  
  14. string _ip6Address3 = "2001:0DB8:02de::0e13";
  15. string _expected3 = "2001:DB8:2de::e13";
  16. string _actual3 = NetWorkToolV2.GetIPAddress(_ip6Address3);
  17. Assert.AreEqual(_expected3, _actual3,true);
  18.  
  19. string _ip6Address4 = "[2001:0DB8:2de::e13]:9010";
  20. string _expected4 = "2001:DB8:2de::e13";
  21. string _actual4 = NetWorkToolV2.GetIPAddress(_ip6Address4);
  22. Assert.AreEqual(_expected4, _actual4, true);
  23.  
  24. string _ipAddress5 = "erroriptest";
  25. string _expected5 = string.Empty;
  26. string _actual5 = NetWorkToolV2.GetIPAddress(_ipAddress5);
  27. Assert.AreEqual(_expected5, _actual5);
  28.  
  29. }

测试结果:

希望有所帮助!

[C#]判断是否是合法的IP4,IP6地址的更多相关文章

  1. C#检查字符串是否是合法的HTTP URL地址的代码

    在研发过程,把开发过程较好的一些内容片段记录起来,下面的内容是关于C#检查字符串是否是合法的HTTP URL地址的内容,应该是对各位有较大用处. protected string HTTPChecke ...

  2. 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 ...

  3. c#判断是否为合法的email地址

    题目要求: class Program { static void Main(string[] args) { Console.WriteLine("请输入正确的邮箱地址,以 @sina.c ...

  4. 判断是否是合法的IP地址

    ipv4 import re #简单的匹配给定的字符串是否是ip地址,下面的例子它不是IPv4的地址,但是它满足正则表达式 if re.match(r"^(?:[0-9]{1,3}\.){3 ...

  5. Asp.net中的一个判断session是否合法的做法

    1 if (Session["UserID"] == "" || Session["UserID"] == null) 2 { 3     ...

  6. 判断是否是有效的IPV4地址

    参考链接: https://blogs.msdn.microsoft.com/oldnewthing/20060522-08/?p=31113 http://www.cnblogs.com/txw19 ...

  7. 解决ios开发中不合法的网络请求地址

    NSString *const kWebsite = @"http://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct ...

  8. js判断非127开头的IP地址

    js验证回送地址,IP地址不能以127开头 回送地址(127.x.x.x)是本机回送地址(Loopback Address) var ipNotStartWith127 = function(ip) ...

  9. Solidity的地址 数组如何判断是否包含一个给定的地址?

    Q: given address[] wallets. What is the correct method to check that the list contains a given addre ...

随机推荐

  1. IOS开发之类和对象

    IOS开发之类和对象 OC和Java一样都是一种面向对象的语言,从今天開始我和大家一起来系统学习这样的面向对象的语言oc,欢迎大家什么问题和我一起探讨和学习. OC定义类有两个步骤:1.接口部分(通俗 ...

  2. 计算机思维or人的思维

    计算机领域就会有计算机领域的一些特性和一些思维方式,或者说有他自己的一些问题,须要用相应的思维方式来进行理解它,从而更好的驾驭他.有些时候遇到的一些问题,自己想却想不明确,也是由于我们没有把自己当做一 ...

  3. Android手机监控软件设计实现

    一.需求分析: 随着IT信息技术的飞速发展,手机的普及,伴随着智能手机的出现及快速的更新换代,手机已不仅仅是一个通信工具,更是一个多功能的应用平台. 手机监控软件则是基于电脑监控软件的原理,植入手机平 ...

  4. 安卓模拟器Android SDK Manager 无法获取SDK列表的解决办法

    1.打开运行Android SDK Manager ,Tool菜单,选择Options,打开设置菜单,勾选“Force https://...sources to be fetched using h ...

  5. careercup-中等难题 17.2

    17.2 设计一个算法,判断玩家是否赢了井字游戏. 解法: 假设这个检查某人是否赢得了井字游戏的函数为HasWon,那么我们第一步要向面试官确认, 这个函数是只调用一次,还是要多次频繁调用.如果是多次 ...

  6. Android利用Looper在子线程中改变UI

    MainActivity如下: package cn.testlooper; import android.app.Activity; import android.os.Bundle; import ...

  7. Understanding transient variables in Java and how they are practically used in HashMap---reference

    What is the significance of the transient keyword in Java? If you know the answer, good! you are a p ...

  8. Session Store

    Session Store Configuration Session Usage Flash Data Session Drivers Configuration Since HTTP driven ...

  9. Using zend-paginator in your Album Module

    Using zend-paginator in your Album Module TODO Update to: follow the changes in the user-guide use S ...

  10. Porsche Piwis Tester II “No VCI has been detected”,how to do?

    Hi,Joy, I am sorry that my Porsche Piwis Tester II from your shop said “No VCI has been detected” wh ...