OVH Cloud OVH Cloud

Format adresse IP

4 réponses
Avatar
news1
Bonjour,

Je voudrais tester la validité d'une adrese IP saisie

Je pensais le faire comme ça, mais cela ne fonctionne pas

if
(!(ereg("([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})",$ip))){
}
Peut-on le faire avec la fonction ereg
A+

4 réponses

Avatar
Calimero
wrote:
Je voudrais tester la validité d'une adrese IP saisie

Je pensais le faire comme ça, mais cela ne fonctionne pas


J'en déduis que par "c'est pas bon", ca laisse passer des IP mal-formées ?

Si tu espères des réponses, il est nécessaire de fournir les infos
pertinentes à la résolution du problème: messages d'erreur, exemples
qui fonctionnent ou ne fonctionnent pas, ...
Dans le cas présent, on peut comprendre/deviner, mais bon...

if
(!(ereg("([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})",$ip))){
}


Le . est un caractère spécial dans un pattern de regexp. Il signifie
"n'importe quel caractère".
Avec cette expression, en toute logique, la saisie suivante:
1x2x3x4
passe.

Il faut inhiber le point pour qu'il soit considéré simplement comme un
point.

Je propose:
if (ereg('([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})',$ip))
{
echo "c'est bonn";
}
else
{
echo "c'est pas bonn";
}

Pour rire: quid de l'IPv6 ? ;-)

--
@+
Calimero

Avatar
Olivier Miakinen

Je voudrais tester la validité d'une adrese IP saisie
Je pensais le faire comme ça, mais cela ne fonctionne pas

ereg("([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})",$ip)


Cette expression semble pouvoir répondre vrai pour une adresse IP
syntaxiquement correcte, mais elle le fera aussi pour plein d'autres
chaînes.

Quelques exemples :
- "999.999.999.999" (alors que les valeurs vont de 0 à 255)
- "127#0{0^1" (le « . » remplace n'importe quel caractère)
- "Téléphone : 29.57.43.99.32 (le soir)" (manquent des ancres)

Peut-on le faire avec la fonction ereg


Oui, sans doute, mais personnellement je préfère preg_match().
Par exemple un truc comme ce qui suit (non testé) :

$octet = "([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])";
preg_match("/^$octet.$octet.$octet.$octet$/");

Avatar
gromittspam

Bonjour,

Je voudrais tester la validité d'une adrese IP saisie

Je pensais le faire comme ça, mais cela ne fonctionne pas

if
(!(ereg("([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})",$ip))){
}
Peut-on le faire avec la fonction ereg
A+


Salut,

plus simple, et sans regex :

if (long2ip(ip2long($ip)) === $ip) {
// ...
}

Avatar
Olivier Miakinen
Le 14/12/2006 07:54, répondait à :

if (long2ip(ip2long($ip)) === $ip) {
// ...
}


Joli. J'avais cherché un truc de ce genre dans la doc, mais sans succès.
Pour info, c'est dans « XCVIII Réseau » (Network Functions en anglais) :

http://fr2.php.net/manual/fr/ref.network.php
http://fr2.php.net/manual/fr/function.ip2long.php
http://fr2.php.net/manual/fr/function.long2ip.php