2009-05-26 23 views
7

Necesito recortar el último octeto desde una dirección IP usando php. Básicamente estoy tratando de eliminar cualquier dígito después del tercer punto. Me pregunto si hay una solución lista para usar para esto. ya que mis habilidades regex son básicas en el mejor de los casos. Muchas gracias.recortar dirección IP octeto

Respuesta

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

o

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

o posiblemente

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

Un enfoque más matemático que no elimina el último dígito, sino más bien lo sustituye por un 0:

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

¿qué más podría pedir? ¡que tengas un gran día! :) –

+0

OMG, ¡qué buena manera de demostrar la regla de "hay más formas de hacerlo bien", respeto! –

+1

El último parece mágico: D – Aley

0

Regexp vatiant

$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 
); 

También es posible usar ip2long y long2ip ... pero no tienen idea de "solución de caja" con él:

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

Esto eliminará los últimos dígitos y el punto.

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