Regex : adresse ip

S'assurer de la bonne structure d'une adresse ip avec une expression régulière n'est pas si évident qu'il peut paraître. Je me suis longtemps contenté de cette simple expression:

<?php
$ip = '100.50.40.30';
if( preg_match("#([0-9]{1,3}\.){3}[0-9]{1,3}#", $ip) ) 
    echo "c'est une adresse IP ... ou pas! ";

Mais en y regardant de plus prêt on remarque que cette expression se contente de vérifier que la chaîne de caractère soit constituée de 4 nombres de 0 à 999 séparés par des points or une adresse IP sera au maximum et dans l'absolu 255.255.255.255.

On préférera donc celle-ci:

if( preg_match("#^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$#", $ip) ) 
    echo "Ça c'est une vraie adresse IP!";

Mais bon, en PHP on peut aussi utiliser un filtre tel que FILTER_VALIDATE_IP.

if( filter_var($ip, FILTER_VALIDATE_IP) ) 
    echo "Encore plus simple";
13-Feb-2020
^