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