正则表达式的IP地址

Moj*_*oDK 8 c# regex

我尝试使用此代码验证IP地址,但它不起作用......

public static bool IP(string ipStr)
{
    string pattern = @"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$";
    Regex check = new Regex (pattern);
    bool valid = false;
    if (ipStr == "") {
        valid = false;
    } else {
        valid = check.IsMatch (ipStr, 0);
    }
    return valid;
}   
Run Code Online (Sandbox Code Playgroud)

知道什么是错的吗?

L.B*_*L.B 60

我会用IPAddress.TryParse静态方法代替.

IPAddress ip;
bool b = IPAddress.TryParse("1234.12.12.12",out ip);
Run Code Online (Sandbox Code Playgroud)

  • @DaveHogan这并不奇怪且完全合法.`IPAddress.TryParse("2130706433",out ip);`和`IPAddress.TryParse("0x7f000001",out ip);`,例如,`127.0.0.1`的另一种表示形式 (6认同)
  • 很好的答案.解决了现有且易于阅读的解决方案的问题.+1 (5认同)
  • 这种方法产生一些相当奇怪的结果.只输入整数将验证.例如:IPAddress.TryParse("255555",out ip)将返回true,IP地址为:{0.3.230.67} (3认同)
  • 我阅读了文档,发现它接受八进制,十进制和十六进制输入.在验证输入时,这肯定是需要注意的.如果有人在我的字段中输入数值1,我希望它错误而不是假设IP是0.0.0.1 (3认同)
  • TryParse不是用于测试IP地址的防弹,请查看文档中的备注:https://docs.microsoft.com/de-de/dotnet/api/system.net.ipaddress.tryparse?view = netcore-1.1 (2认同)

Alb*_*ban 7

匹配有效的IP地址使用

^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$
Run Code Online (Sandbox Code Playgroud)

代替

^([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])(\.([01]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])){3}$
Run Code Online (Sandbox Code Playgroud)

因为许多正则表达式引擎匹配OR序列中的第一种可能性

你可以试试你的正则表达式引擎:10.48.0.200

这里测试差异


sca*_*tag 1

我本身并不是一个真正的正则表达式专家,但我使用 Expresso(一个正则表达式工具),它有自己的正则表达式库,用于像这样的预设场景。试试下面这个。

string pattern = @"(?<First>2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?<Second>2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?<Third>2[0-4]\d|25[0-5]|[01]?\d\d?)\.(?<Fourth>2[0-4]\d|25[0-5]|[01]?\d\d?)";
Run Code Online (Sandbox Code Playgroud)