<?
$ip = "255.255.255.255";
$exp = explode('.',$ip);
if ($exp[0]<=255 && $exp[1]<=255 && $exp[2]<=255 && ($exp[3]<=255 || strpos($exp[3],'0/'))
&& preg_match("!^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.(([0-9]{1,3}))$!",$ip)) {
echo "ok";
} else {
echo "$ip is an invalid ip";
}
// or if you also want to check ranges like 192.168.0.0/32
$ip = "255.255.255.255";
$exp = explode('.',$ip);
if ($exp[0]<=255 && $exp[1]<=255 && $exp[2]<=255 && ($exp[3]<=255 || strpos($exp[3],'0/'))
&& preg_match("!^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.(([0-9]{1,3})|(0/32)|(0/16)|(0/8))$!",$ip)) {
echo "ok";
} else {
echo "$ip is an invalid ip or ip range";
}
?>
Another function to convert ip-address to ip-integer or ip-integer to ip-address
function ipconvert($ip) {
$seper = "@";
$exp = explode('.',$ip);
if ($exp[0]<=255 && $exp[1]<=255 && $exp[2]<=255 && ($exp[3]<=255 || strpos($exp[3],'0/')) && preg_match("!^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.(([0-9]{1,3})|(0/32)|(0/16)|(0/8))$!",$ip)) {
switch ($exp[3]) {
case "0/32":
$res = $exp[0]*pow(256,3) + $exp[1]*pow(256,2) + $exp[2]*256;
$resb = $res + 255*pow(256,0);
$resb = $seper . $resb;
break;
case "0/16":
$res = $exp[0]*pow(256,3) + $exp[1]*pow(256,2);
$resb = $res + 255*pow(256,0) + 255*pow(256,1);
$resb = $seper . $resb;
break;
case "0/8":
$res = $exp[0]*pow(256,3);
$resb = $res + 255*pow(256,0) + 255*pow(256,1) + 255*pow(256,2);
$resb = $seper . $resb;
break;
default:
$res = $exp[0] * pow(256,3) + $exp[1] * pow(256,2) + $exp[2] * 256 + $exp[3];
}
} else {
$exp = explode($seper,$ip);
if ($exp[0] <= (pow(256,4)-1) && preg_match("!^([0-9]{1,10})$!",$exp[0])) {
$ip0 = intval(( $exp[0] )/pow(256,3));
$ip1 = intval(( $exp[0] - $ip0*pow(256,3) )/pow(256,2));
$ip2 = intval(( $exp[0] - $ip0*pow(256,3) - $ip1*pow(256,2) )/pow(256,1));
$ip3 = intval(( $exp[0] - $ip0*pow(256,3) - $ip1*pow(256,2) - $ip2*pow(256,1) )%pow(256,1));
switch ($exp[1] - $exp[0]) {
case (pow(256,1) - 1):
$res = "$ip0.$ip1.$ip2.0/32";
break;
case (pow(256,2) - 1):
$res = "$ip0.$ip1.$ip2.0/16";
break;
case (pow(256,3) - 1):
$res = "$ip0.$ip1.$ip2.0/8";
break;
default:
$res = "$ip0.$ip1.$ip2.$ip3";
}
}
}
return "${res}${resb}";
}