检查用户是否已正确输入IP地址

时间:2011-10-14 16:02:44

标签: c# validation

我目前正在开发一个C#项目,我需要验证用户在文本框中输入的文本。

其中一项验证是检查以确保已正确输入IP地址。

我将如何进行IP地址验证。

感谢您提供的任何帮助。

6 个答案:

答案 0 :(得分:6)

您可以使用IPAddress.Parse Method .NET Framework 1.1。或者,如果您使用的是.NET 4.0,请参阅IPAddress.TryParse Method .NET Framework 4的文档。

此方法确定字符串的内容是否表示有效的IP地址。在.NET 1.1中,返回值是IP地址。在.NET 4.0中,返回值表示成功/失败,并且在方法调用中作为out参数传递的IPAddress中返回IP地址。

编辑:好吧我会为赏金玩游戏:)这是一个示例实现作为扩展方法,需要C#3+和.NET 4.0:

using System;
using System.Net;
using System.Text.RegularExpressions;

namespace IPValidator
{
    class Program
    {
        static void Main (string[] args)
        {
            Action<string> TestIP = (ip) => Console.Out.WriteLine (ip + " is valid? " + ip.IsValidIP ());

            TestIP ("99");
            TestIP ("99.99.99.99");
            TestIP ("255.255.255.256");
            TestIP ("abc");
            TestIP ("192.168.1.1");
        }

    }

    internal static class IpExtensions
    {
        public static bool IsValidIP (this string address)
        {
            if (!Regex.IsMatch (address, @"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"))
                return false;

            IPAddress dummy;
            return IPAddress.TryParse (address, out dummy);
        }
    }
}

答案 1 :(得分:5)

您似乎只关心验证X.X.X.X格式的IPv4 IP地址字符串。如果是这样,这段代码就可以直接执行该任务:

string ip = "127.0.0.1";
string[] parts = ip.Split('.');
if (parts.Length < 4)
{
    // not a IPv4 string in X.X.X.X format
}
else
{
    foreach(string part in parts)
    {
        byte checkPart = 0;
        if (!byte.TryParse(part, out checkPart))
        {
            // not a valid IPv4 string in X.X.X.X format
        }
    }
    // it is a valid IPv4 string in X.X.X.X format
}

答案 2 :(得分:1)

如果您想查看IP地址是否确实存在,可以使用Ping class

答案 3 :(得分:1)

在他添加错误的正则表达式之前,insta的回答更接近了。

public static bool IsValidIP(string ipAddress)
{
  IPAddress unused;
  return IPAddress.TryParse(ipAddress, out unused);
}

或者由于OP不希望包含非全点四边形的整数IPv4地址:

public static bool IsValidIP(string ipAddress)
{
  IPAddress unused;
  return IPAddress.TryParse(ipAddress, out unused)
    &&
    (
        unused.AddressFamily != AddressFamily.InterNetwork
        ||
        ipAddress.Count(c => c == '.') == 3
    );
}

测试:

IsValidIP("fe80::202:b3ff:fe1e:8329")返回true(正确)。

IsValidIP("127.0.0.1")返回true(正确)。

IsValidIP("What's an IP address?")返回false(正确)。

IsValidIP("127")返回true第一版false第二版(正确)。

IsValidIP("127.0")返回true第一版false第二版(正确)。

答案 4 :(得分:1)

我会使用正则表达式。

^((25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)$

使用命名组,可能更清楚。它是用Ruby编写的。我不知道C#,但我想这个语言中的正则表达式支持是完整的,并且命名组可能存在。

 /(?<number>(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){0}^(\g<number>\.){3}\g<number>$/

答案 5 :(得分:0)

这是我的解决方案:

using System.Net.NetworkInformation;
using System.Net;
    /// <summary>
    /// Return true if the IP address is valid.
    /// </summary>
    /// <param name="address"></param>
    /// <returns></returns>
    public bool TestIpAddress (string address)
    {
        PingReply reply;
        Ping pingSender = new Ping ();

        try
        {
            reply = pingSender.Send (address);
        }
        catch (Exception)
        {
            return false;
        }

        return reply.Status == IPStatus.Success;
    }