47 votes

Regex pour faire correspondre une adresse IP

Je suis novice en matière de regex et je veux utiliser preg_match pour savoir si une chaîne de caractères est une adresse IP.

Par exemple,

$string = "10.0.0.1";
preg_match($regex, $string);

doit retourner vrai. Donc, ce que $regex devrait être ?

3 votes

Avez-vous d'abord essayé Google ? expressions-réguliere.info/regexbuddy/ipaccurate.html

4 votes

45.56.78.888 n'est pas une adresse IP.

0 votes

@bazmegakapa ouais je viens de réaliser, je l'ai écrit au hasard :D mais tu as compris le point je pense ;)

129voto

alex Points 186293

N'utilisez pas une regex quand vous n'en avez pas besoin :)

$valid = filter_var($string, FILTER_VALIDATE_IP);

Mais si vous voulez vraiment une regex...

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

Cependant, la regex ne validera que le format, le maximum pour tout octet est le maximum pour un octet non signé, soit 255 .

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

1 votes

Est-ce que filter_var fonctionne pour ::1 comme IP ?

2 votes

0 votes

\b\d {1,3} \.\d {1,3} \.\d {1,3} \.\d {1,3} \b

9voto

Tim Pietzcker Points 146308
/^\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 pas une adresse IP). Et bien sûr, il s'agit uniquement d'une adresse IPv4.

0 votes

@alex : Alors 999.999.999.999 sera aussi une IP valide ! !??

0 votes

@PratikCJoshi : La question originale (qui a été éditée des années après ma réponse) demandait une regex qui correspondrait à n'importe quelle séquence de quatre nombres séparés par des points et comportant jusqu'à 3 caractères chacun....

1 votes

C'est assez simple mais personne ne voudrait d'une adresse IP erronée. Veuillez envisager d'ajouter une Regex d'adresse IP valide comme réponse. Vous voyez des gens qui viennent sur cette page en pensant qu'ils obtiendraient une Regex pour Valable l'adresse IP, mais ils ne comprennent pas cette Regex. Merci

7voto

JackSparrow Points 49
/^(?:(?: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 permettra de vérifier la gamme parfaite, y compris si une gamme est supérieure à 255 à partir de l'un des 4.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X