2009-05-26 16 views
7

Ho bisogno di tagliare l'ultimo ottetto da un indirizzo IP utilizzando php. Fondamentalmente sto cercando di rimuovere qualsiasi cifra dopo il terzo punto. Mi chiedo se esiste una soluzione pronta per questo? come le mie abilità regex sono fondamentali al meglio. Grazie molto.indirizzo IP assetto ottetto

risposta

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

o

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

o eventualmente

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

Un approccio più matematico che non rimuove l'ultima cifra, ma piuttosto sostituisce con un 0:

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

Cos'altro potrei chiedere? Vi auguro una buona giornata! :) –

+0

OMG, che bel modo di dimostrare "c'è più modo di farlo bene", rispetto! –

+1

L'ultimo sembra magico: 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 
); 

Si potrebbe anche usare ip2long e long2ip ... ma non hanno idea di "soluzione di dialogo" con essa:

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

Questo eliminerà le ultime cifre e il punto.

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