Je sais que ce message n'est pas nouveau, mais j'ai essayé plusieurs des solutions proposées et aucune ne fonctionne aussi bien que celle que j'ai trouvée grâce à un lien fourni par Justin Jones. Ils en ont plusieurs pour l'adresse IP mais celle-ci est en tête de liste et en utilisant LinqPad (j'adore LinqPad), la plupart des tests que j'ai effectués fonctionnent extrêmement bien. Je recommande d'utiliser celle-ci plutôt que l'une des expressions fournies précédemment :
^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$
Faites-en l'essai dans LinqPad avec les éléments suivants :
// \b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b 355.168.0.1 = 355.168.0.1 (Not Correct)
// ((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]?) 355.168.0.1 = 55.168.0.1 (Not correct)
// \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} 355.168.0.1 = 355.168.0.1 (Not Correct)
// ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ 355.168.0.1 = 355.168.0.1 (Not Correct)
// ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$ 355.168.0.1 = 355.168.0.1 (Not Correct)
// ^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$ 355.168.0.1 = No Match (Correct)
Match match = Regex.Match("355.168.0.1", @"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$");
if (match.Success) {
Console.WriteLine(match.Value);
}
else {
Console.WriteLine("No match.");
}
Avec la nouvelle RegEx, ce n'est pas valide, ce qui est correct : 355.168.0.1 = No Match, ce qui est correct comme indiqué dans les commentaires.
Je suis heureux de pouvoir apporter des modifications à ce système, car je travaille sur un outil qui utilise l'expression et je suis toujours à la recherche de meilleures façons de procéder.
UPDATE : J'ai créé un projet .NET Fiddle pour fournir un exemple fonctionnel de cette expression ainsi qu'une liste d'adresses IP qui testent diverses valeurs. N'hésitez pas à le bricoler et à essayer différentes valeurs pour exercer cette expression et à fournir vos commentaires si vous trouvez un cas où l'expression échoue. https://dotnetfiddle.net/JoBXdI
MISE À JOUR 2 : Mieux encore, reportez-vous à cet article : Une autre question connexe.
Merci et j'espère que cela vous aidera !
4 votes
L'expression mise à part, ne devriez-vous pas regarder
Regex.Matches
plutôt queSplit
?0 votes
Duplication possible de Expression régulière pour correspondre au nom d'hôte ou à l'adresse IP ?
7 votes
999.999.999.999
?1 votes
@Andrey c'est bon, c'est la chaîne qui pourrait être dernièrement juste vérifiée avec
ipaddress.TryParse
ou quelque chose comme ça. L'essentiel ici est de récupérer la chaîne qui est censée être une IP.0 votes
Exception. Suppression du premier [ dans la chaîne Regex