判断一个字符串如果没有端口的话,利用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. HDU 5071 Chat(2014鞍山B,模拟)

    http://acm.hdu.edu.cn/showproblem.php?pid=5071 Chat Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  2. [React Native] Using the WebView component

    We can access web pages in our React Native application using the WebView component. We will connect ...

  3. android Animation 动画效果介绍

    Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动 ...

  4. PAT 1010

    1010. Radix (25) Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 11 ...

  5. 加密解密知识 php非对称加密

    function test1(){ $config = array( "digest_alg" => "sha1", "private_key_ ...

  6. php验证码制作

    目标: 使用php生成验证码 成品: 逻辑代码: authcode.php <?php header("Content-type:image/png"); session_s ...

  7. java基础常识

    现在总结一些经常接触到的java名词 一:java技术分类 javase:java standard editor:java标准版,主要定义java经常使用的API(Application Progr ...

  8. js动态生成按钮,页面用DIV简单布局2

    对前边不完善的修改 <!DOCTYPE html><html><head><title>test.html</title> <meta ...

  9. ADO和ADO.NET有什么不同?

    1.一些ADO中常见的类型比如RecordSet在ADO.NET中已经没有了,而且在ADO.NET中也新增了许多在传统ADO中找不到的直接对应的新类型(如数据适配器): 2.传统的ADO主要针对紧密连 ...

  10. php 首页定时生成静态页面

    往往首页的js,商务通代码加的太多,导致页面访问速度变慢,可以把首页有动态变为静态进行访问,访问速度会有所提升,不过如果更新首页数据,并不能及时更新,而是你规定的时间内固定更新一次 代码如下: < ...