将识别有效IPv4地址的算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将识别有效IPv4地址的算法相关的知识,希望对你有一定的参考价值。

我必须编写一个算法,以点十进制格式识别有效的IPv4地址。如果IP由四个八位字节组成,则应视为有效,其中0到255(包括)的值也为0(例如01.02.03.04)被认为无效。

public static bool is_valid_IP(string IpAddres)
{
    string[] adress = IpAddres.Split('.');

    if (adress.Length!=4)
    {
        return false;
    }

    for (int i = 0; i < 4; i++)
    {
        int result;
        if (adress[i][0]=='0')
        {
            return false;
        }
        if (!int.TryParse(adress[i], out result))
        {
            return false;
        }
        if (result >255)
        {
            return false;
        }
    }


    return true;
}

它确实适用于我尝试的所有IP,但我学校的测试(不知道它们是什么)说它是错的。有人能指出我做错了吗?

答案

0.0.0.0 is a valid IP addressthe following will reject it

if (adress[i][0]=='0')
{
    return false;
}
另一答案

为什么不使用IPAddress类来解析它?

IPAddress address = IPAddress.Parse(ipAddress);

https://msdn.microsoft.com/en-us/library/system.net.ipaddress.parse(v=vs.110).aspx

另一答案

我很确定你的解析器会说双位或单位负ips是有效的。

另一答案

你需要检查前导零,如果它存在返回false,你的测试只检查前0,如果测试是001.002.003.4,它将失败,使用if (adress.StartsWith("0"))但排除0.0.0.0

您还需要检查负数,使用TryParse的结果

以上是关于将识别有效IPv4地址的算法的主要内容,如果未能解决你的问题,请参考以下文章

算法判断IP地址是不是合法的,包含IPv4和IPv6

算法判断IP地址是不是合法的,包含IPv4和IPv6

在 Java 中验证 IPv4 地址

如何批量验证字符串是有效的 IPv4 或 IPv6 地址?

IPV4简单分类

Ping 并使用三个八位字节的 ipv4 地址。为啥它有效?