正则表达式的IP地址

时间:2012-02-06 19:22:14

标签: 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;
}   

知道什么是错的吗?

6 个答案:

答案 0 :(得分:59)

我会改用IPAddress.TryParse静态方法。

IPAddress ip;
bool b = IPAddress.TryParse("1234.12.12.12",out ip);

答案 1 :(得分: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}$

而不是

^([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}$

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

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

测试差异here

答案 2 :(得分:2)

有一个previously answered question可用于有效的IP地址。

至于调试正则表达式,在Windows上我衷心推荐Expresso。在网络上,有一个免费Flash-based tester可用。

答案 3 :(得分: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?)";

答案 4 :(得分:0)

答案 5 :(得分:0)

以下是检查所有可能的IPv4地址的完整正则表达式(点分十进制,点分十六进制,点八进制,十进制,十六进制,八进制和混合模式)

^(0[0-7]{10,11}|0(x|X)[0-9a-fA-F]{8}|(\b4\d{8}[0-5]\b|\b[1-3]?\d{8}\d?\b)|((2[0-5][0-5]|1\d{2}|[1-9]\d?)|(0(x|X)[0-9a-fA-F]{2})|(0[0-7]{3}))(\.((2[0-5][0-5]|1\d{2}|\d\d?)|(0(x|X)[0-9a-fA-F]{2})|(0[0-7]{3}))){3})$

我已经用所有可能的地址进行了测试。