将识别有效IPv4地址的算法

问题描述 投票:0回答:4

我必须编写一个算法,以点十进制格式识别有效的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,但我学校的测试(不知道它们是什么)说它是错的。有人能指出我做错了吗?

c# ip
4个回答
2
投票

0.0.0.0 is a valid IP addressthe following will reject it

if (adress[i][0]=='0')
{
    return false;
}

1
投票

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

IPAddress address = IPAddress.Parse(ipAddress);

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


0
投票

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


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.