修剪IP地址八位字节

时间:2009-05-26 09:32:18

标签: php

我需要使用php从ip地址修剪最后一个八位字节。基本上我试图删除第三个点后的任何数字。我想知道是否有开箱即用的解决方案吗?因为我的正则表达能力是最基本的。非常感谢。

3 个答案:

答案 0 :(得分:20)

$trimmed = implode(".", array_slice(explode(".", $ip), 0, 3));

$trimmed = substr($ip, 0, strrpos($ip, "."));

或可能

$trimmed = preg_replace("/(\d{1,3})\.(\d{1,3}).(\d{1,3}).(\d{1,3})/", '$1.$2.$3', $ip);

一种更加数学的方法,它不会删除最后一位数字,而是将其替换为0:

$newIp = long2ip(ip2long("192.168.0.10") & 0xFFFFFF00);

答案 1 :(得分:2)

这将删除最后的数字和点。

$trimmed = preg_replace('/\.\d{1,3}$/', '', $ip);

答案 2 :(得分:0)

正则表达式

$ip = '192.168.20.10';
preg_replace_callback(
    '/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/'
    , create_function('$matches', '$matches[4] = "0"; array_shift($matches); return implode(".", $matches);')
    , $ip
);

您也可以使用ip2long和long2ip ...但不知道“盒子解决方案”:

$ip = ip2long('192.168.20.10') - 10;
echo long2ip($ip);