2009-05-26 7 views
7

Je dois couper le dernier octet à partir d'une adresse IP en utilisant php. Fondamentalement, j'essaie de supprimer les chiffres après le troisième point. Je me demande s'il existe une solution prête à l'emploi pour cela? car mes capacités de regex sont au mieux basiques. Merci beaucoup.trim ip adresse octet

Répondre

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

ou

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

ou peut-être

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

Une approche plus mathématique qui ne supprime pas le dernier chiffre, mais remplace plutôt avec un 0:

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

Que puis-je demander de plus? passez une bonne journée! :) –

+0

OMG, quelle belle façon de démontrer la règle "il y a plus moyen de bien faire les choses", respect! –

+1

Le dernier semble magique: 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 
); 

Vous pouvez également utiliser ip2long et long2ip ... mais ont aucune idée de « solution de boîte » avec elle:

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

Cela supprimera les derniers chiffres et le point.

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