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

本文详细介绍了如何判断一个包含端口号的IP地址,并通过实例代码演示了使用Uri.CheckHostName和Uri.TryCreate方法来实现这一过程。重点突出在正则表达式的应用和端口的提取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

判断一个字符串如果没有端口的话,利用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); } 

测试结果:

image

希望有所帮助!

转载于:https://www.cnblogs.com/hxgq/p/3889750.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值