我的格式是字符串:
172.60.136.145,172.60.136.146,172.60.136.147,........
我需要帮助使用Regex验证字符串中的IpAddresses
答案 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}$/