web-dev-qa-db-fra.com

Regex pour correspondre à une adresse IP

Je suis novice avec regex et je veux utiliser la fonction preg_match Pour trouver si une chaîne est une adresse IP.

Par exemple, si $string = "45.56.78.222" Ou quelque chose du genre, preg_match($regex, $string) devrait renvoyer true. Alors, quel devrait être $regex?

41
ibrahim

N'utilisez pas d'expression régulière lorsque vous n'en avez pas besoin :)

$valid = filter_var($string, FILTER_VALIDATE_IP);

Mais si vous voulez vraiment une expression régulière ...

$valid = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/', $string);

Le regex ne validera cependant que le format, le max pour tout octet est le max pour un octet non signé, ou 255.

C'est pourquoi IPv6 est nécessaire - une adresse IPv4 ne fait que 32 bits et Internet est populaire :)

118
alex
/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/

devrait faire pour votre exemple (qui contient une chaîne qui est pas une adresse IP). Et bien sûr, ce n'est qu'une adresse IPv4.

9
Tim Pietzcker
/^(?:(?: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]?)$/ 

Cela vérifiera la plage parfaite, y compris si une plage est supérieure à 255 parmi 4.

5
JackSparrow