判断一个字符串如果没有端口的话,利用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地址的更多相关文章

  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开发——网络编程OC篇&Socket编程

    Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作 ...

  2. 面向对象的程序设计(二)理解各种方法和属性typeof、instanceof、constructor、prototype、__proto__、isPrototypeOf、hasOwnProperty

    //理解各种方法和属性typeof.instanceof.constructor.prototype.__proto__.isPrototypeOf.hasOwnProperty. //1.typeo ...

  3. Java自学成长路线(转载)

    JAVA自学之路 一:学会选择  决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等.  JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅 ...

  4. Android实现资料收藏

    1,调web浏览器 Uri myBlogUri = Uri.parse("http://xxxxx.com"); returnIt = new Intent(Intent.ACTI ...

  5. python中HTMLParser简单理解

    找一个网页,例如https://www.python.org/events/python-events/,用浏览器查看源码并复制,然后尝试解析一下HTML,输出Python官网发布的会议时间.名称和地 ...

  6. signal函数、sigaction函数及信号集(sigemptyset,sigaddset)操作函数

    信号是与一定的进程相联系的.也就是说,一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如,一个进程可以忽略某些信号而只处理其他一些信号:另外,一个进程还可以选择如何处理信号.总之,这些总与特定 ...

  7. 【linux操作命令】crontab

    带续写... 版权声明:本文为博主原创文章,未经博主允许不得转载.

  8. .net 并发

    Nhibernate并发参考 http://www.cnblogs.com/lyj/archive/2008/10/21/1316269.html EF并发参考 http://www.cnblogs. ...

  9. Sql 基于列的Case表达式

    Case表达式可以用在 Select,update ,delete ,set,in,where ,order by,having子句之后, 只是case表达式不能控制sql程序的流程,只能作为基于列的 ...

  10. Apache Rewrite url重定向功能的简单配置

    http://www.jb51.net/article/24435.htm 1.Apache Rewrite的主要功能 就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范.平时帮助我 ...