Comment puis-je simplement vérifier si une chaîne est une adresse IP valide en PHP?
À l'aide de PHP, comment puis-je valider qu'une chaîne de caractères est une IP valide?
Exemples de chaînes valides:
- 192.158.5.95
- 121.212
- 12.12.12.204
Exemples de chaînes non valides:
- 121
- 10 12 12 (pas de points)
Mon script utilise ce code, mais cela est insuffisant pour mes besoins:
if(strpos($input, '.') !== false)
{
//There is a period
}
else
{
//No Period
}
En tant que tel, quelqu'un peut-veuillez indiquer comment je peux valider une chaîne de caractères est une IP valide?
source d'informationauteur Harsh
Vous devez vous connecter pour publier un commentaire.
Essayer avec filter_var
Exemple:
Maintenant, si vous avez une chaîne comme
foo
127.0.0.bla
ou similaire,filter_var
sera de retourfalse
. Valide IPs comme10.1.10.10
::1
sont considérées comme valables.Avis
Aussi, vous avez pour vérifier
!== false
parce quefilter_var
renvoie la valeur, si elle est valide etfalse
si elle ne l'est pas (par exemple,filter_var("::1", FILTER_VALIDATE_IP)
sera de retour::1
pastrue
).Drapeaux
Vous pouvez également utiliser certains des indicateurs suivants:
filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE)
Si
$ip
est127.0.0.1
la fonction sera de retourfalse
.Avis Maladroitement
::1
est ok pourFILTER_FLAG_NO_PRIV_RANGE
mais127.0.0.1
ne l'est pas.Juste au cas où il y a quelqu'un qui ne veut pas utiliser le ip2long fonction, ici est une fonction simple (Idée prise à partir d'une classe dans osTicket):
iNaD ist droit, la filter_var() la version est la meilleure - ip2long() est vraiment pas que failsave. Juste essayer de le mettre dans de drôles de choses et de voir par vous-même. J'ai fait une performace-vérifier et filter_var est assez beaucoup plus vite que le commun des regex versions.
Si @Tomgrohl mis regexes, vous pouvez le faire en une seule ligne:
Explication:
En ligne testeur: https://regex101.com/r/eM4wB9/1
Remarque: il ne correspond ipv4