【问题标题】:Parsing an IP Address from a String using static method使用静态方法从字符串中解析 IP 地址
【发布时间】:2012-12-11 20:30:51
【问题描述】:

是否有一种静态方法可以用来解析字符串以检查它是否是 IP 地址,而不必初始化一个新的 System.Net.IPAddress 实例?

这就是我想要实现的目标

System.Net.IPAddress throwawayIpAddress = new System.Net.IPAddress(Encoding.ASCII.GetBytes("127.0.0.1"));

System.Net.IPAddress.TryParse(baseUri.Host, out throwawayIpAddress);

baseUriUri 变量,Hoststring。我正在寻找更简单的东西,例如:

System.Net.IPAddress.TryParse(baseUri.Host, out  new System.Net.IPAddress(Encoding.ASCII.GetBytes("127.0.0.1"));

由于TryParse() 方法需要Stringout IPAddress 引用,我不能直接传递null 或一次性对象。

感谢您对解析字符串以测试其是否为 IP 地址的更简单方法的建议。

【问题讨论】:

  • 语言错误 - 假设 throwawayIpAddress 被用作 OUT,没有必要对其进行初始化。这实际上应该引发一些警告。只需将其设置为“null”,而不是 new ....IpAddress。它是一个 OUT 参数,无论如何它都会被覆盖掉。不过,我很确定您会收到警告甚至错误,但使用已初始化的变量作为输出参数。

标签: c# .net parsing ip-address system.net


【解决方案1】:
public static bool IsValidIpAddress(this string s)
{
    IPAddress dummy;
    return IPAddress.TryParse(s, out dummy);
}

【讨论】:

    【解决方案2】:

    IPAddress.TryParse 需要和 out 参数。该参数不必初始化。 对于您的代码,它可以是:

    System.Net.IPAddress throwawayIpAddress; //No need to initialize it
    if(System.Net.IPAddress.TryParse(baseUri.Host, out throwawayIpAddress))
    {
    //valid IP address
    }
    {
    //Invalid IP address
    }
    

    如果解析成功,那么您的对象 throwawayIpAddress 将具有有效的 IP 地址,您可以在代码中进一步使用它,或者如果您愿意,可以忽略它。

    【讨论】:

      【解决方案3】:

      你可以使用正则表达式

      var isValidIP = Regex.IsMatch(stringValue, @"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-06
        • 2020-04-26
        • 2015-09-14
        • 1970-01-01
        • 2014-10-11
        • 2021-09-02
        • 2018-11-04
        相关资源
        最近更新 更多