需要帮助使用Regex验证IpAddress字符串

时间:2011-04-11 07:20:00

标签: regex

我的格式是字符串:

172.60.136.145,172.60.136.146,172.60.136.147,........

我需要帮助使用Regex验证字符串中的IpAddresses

4 个答案:

答案 0 :(得分:4)

具体如上

172\.60\.136\.[0-9]{1-3}

将其特别指定为172.60.136.0至999

的范围

当然不包括有效的IP,这将允许172.60.136.0或172.60.136.999

(0?0?[1-9]|0?[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])(\\.(0?0?[0-9]|0?[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])){2}(\\.(0?0?[1-9]|0?[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))

测试IP是否有效,它允许1.0.0.1,通过254.254.254.254,不允许以.0等结尾的任何内容。

答案 1 :(得分:1)

在PHP中:

$tmp = explode(',', $ips);
$tmp = array_map('ip2long', $tmp);
if (array_search(false, $tmp, true) !== false) {
    // at least one ip is invalid
}

答案 2 :(得分:0)

我不确定正则表达式是你最好的选择,因为只有当数字为254或更少时,ip地址才有效

我会将字符串拆分为逗号,然后按句点拆分每个字符串。我会检查有4个部分,每个部分可以转换为254或更少的数字。

像这个未经测试的伪代码

string[] addresses = myString.Split(",");
foreach(string address in addresses)
{
    string[] numbers = address.Split(".");
    if (numbers.Length==4)
    {
         Foreach(string number in numbers)
         {
              // need to check that the last number is not a zero as well - not shown here
              int value = Convert.ToInt32(number);
              if (value<0 && value>254)
              {
                  //invalid
              }
         }
    }
    else
    {
        //invalid
    }
}

您可能会使用您的语言来帮助解决此问题,但您不会说它是什么语言。您可以在c#中执行此操作:

string[] addresses = myString.Split(",");
foreach(string address in addresses)
{
    IpAddress ipAddress;
    if (!IpAddress.TryParse(address, out ipAddress))
    {
        //invalid
    }
}

如果您只想做无效的事情:

IPAddress ipAddress;
string[] addresses = myString.Split (",");
foreach (string address in addresses.Where (address => !IPAddress.TryParse (address, out ipAddress)))
    {
        //all elements in this loop will be invalid entries
        // remove the '!' to get only the valid ones 
    }

答案 3 :(得分:-1)

尝试:

/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/