обрезать октет IP-адреса - PullRequest
8 голосов
/ 26 мая 2009

Мне нужно обрезать последний октет с IP-адреса с помощью php. В основном я пытаюсь просто удалить любые цифры после третьей точки. Мне интересно, есть ли готовое решение для этого? мои способности регулярных выражений в лучшем случае являются базовыми. Большое спасибо.

Ответы [ 3 ]

20 голосов
/ 26 мая 2009
$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);
2 голосов
/ 26 мая 2009

Это удалит последние цифры и точку.

$trimmed = preg_replace('/\.\d{1,3}$/', '', $ip);
0 голосов
/ 26 мая 2009

регулярных выражений

$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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...