Dans la validation d'adresse IP suivante, je veux voir si c'est une adresse IP valide ou non, comment puis-je le faire en utilisant le
>>> ip="241.1.1.112343434"
>>> aa=re.match(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}[^0-9]",ip)
>>> aa.group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
Utilisez des ancres à la place:
aa=re.match(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$",ip)
Ceux-ci s'assurent que le début et la fin de la chaîne correspondent au début et à la fin de l'expression régulière. (Eh bien, techniquement, vous n'avez pas besoin de l'ancre ^
de départ car elle est implicite dans la méthode .match()
).
Ensuite, vérifiez si l'expression rationnelle correspond effectivement avant d'essayer d'accéder à ses résultats:
if aa:
ip = aa.group()
Bien sûr, ce n'est pas une bonne approche pour valider les adresses IP (consultez la réponse de gnibbler pour connaître la méthode appropriée). Cependant, les expressions rationnelles peuvent être utiles pour détecter les adresses IP dans une chaîne plus longue:
ip_candidates = re.findall(r"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b", ip)
Ici, les ancres de limite de code \b
s'assurent que les chiffres ne dépassent pas 3 pour chaque segment.
Pourquoi ne pas utiliser une fonction de bibliothèque pour valider l'adresse IP?
>>> ip="241.1.1.112343434"
>>> socket.inet_aton(ip)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
socket.error: illegal IP address string passed to inet_aton
\d{1,3}
correspondra à des nombres comme 00
ou 333
également qui ne seraient pas des identifiants valides.
Ceci est une excellente réponse de smink, citant:
ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
try:
parts = ip.split('.')
return len(parts) == 4 and all(0 <= int(part) < 256 for part in parts)
except ValueError:
return False # one of the 'parts' not convertible to integer
except (AttributeError, TypeError):
return False # `ip` isn't even a string
Les éléments suivants vérifieront si une adresse IP est valide ou non: Si l’adresse IP est comprise entre 0.0.0.0 et 255.255.255.255, le résultat sera true, sinon la valeur sera false:
[0<=int(x)<256 for x in re.split('\.',re.match(r'^\d+\.\d+\.\d+\.\d+$',your_ip).group(0))].count(True)==4
Exemple:
your_ip = "10.10.10.10"
[0<=int(x)<256 for x in re.split('\.',re.match(r'^\d+\.\d+\.\d+\.\d+$',your_ip).group(0))].count(True)==4
Sortie:
>>> your_ip = "10.10.10.10"
>>> [0<=int(x)<256 for x in re.split('\.',re.match(r'^\d+\.\d+\.\d+\.\d+$',your_ip).group(0))].count(True)==4
True
>>> your_ip = "10.10.10.256"
>>> [0<=int(x)<256 for x in re.split('\.',re.match(r'^\d+\.\d+\.\d+\.\d+$',your_ip).group(0))].count(True)==4
False
>>>