Regex pour correspondre à une adresse IP [fermé]

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

Par exemple, si $string = "45.56.78.222" ou quelque chose comme ça , preg_match($regex, $string) devrait revenir vrai. Donc, ce que $regex devrait être?

38
demandé sur alex 2011-05-03 10:21:07

3 réponses

Ne pas utiliser une regex quand vous n'en avez pas besoin :)

$valid = filter_var($string, FILTER_VALIDATE_IP);

cependant si vous voulez vraiment un regex...

$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 n'importe quel octet est le max pour un octet non signé, ou 255.

C'est pourquoi IPv6 est nécessaire - une adresse IPv4 est seulement 32bits de long et l'internet est populaire :)

112
répondu alex 2011-05-03 06:48:57
/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/

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

9
répondu Tim Pietzcker 2011-05-03 06:25:02
/^(?:(?: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]?)$/ 

ceci vérifiera la plage parfaite y compris si une plage est supérieure à 255 de n'importe laquelle de 4.

5
répondu JackSparrow 2013-10-22 18:08:19