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?
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 :)
/^\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.
/^(?:(?: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.