检查用户是否正确输入IP地址
本文关键字:输入 IP 地址 用户 是否 检查 | 更新日期: 2023-09-27 18:11:12
我目前正在一个c#项目中工作,我需要验证用户输入到文本框中的文本。
需要的验证之一是它检查以确保正确输入了IP地址。
我该如何对IP地址进行验证?
谢谢你能提供的任何帮助。
可以使用IPAddress。. net框架1.1。或者,如果您使用的是。net 4.0,请参阅文档中的IPAddress。. net Framework 4.
此方法确定字符串的内容是否表示有效的IP地址。在。net 1.1中,返回值是IP地址。在。net 4.0中,返回值表示成功/失败,IP地址在方法调用中作为out
参数传递的IPAddress中返回。
编辑:好吧,我会玩游戏的赏金:)这里有一个示例实现作为一个扩展方法,需要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);
}
}
}
似乎您只关心验证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
}
如果要查看IP地址是否实际存在,可以使用Ping类
insta在添加错误的regexp之前的答案更接近。
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
的第二个版本(正确)。
我会使用正则表达式
^((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>$/
我的解决方案是:
<>之前使用System.Net.NetworkInformation;使用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;
}