Question

Comment puis-je déterminer si une chaîne est une adresse IP ?Soit IPv4 ou IPv6?

Quel est le nombre minimum et maximum de caractères ?

Je suppose que ce serait un expression régulière répondre.

Était-ce utile?

La solution

Mais la question n’est pas aussi simple que de supposer a.b.c.d ... il y a bien plus de formes que vous ne le pensez.

Mais c'est sûrement une question de Google pour cette question ?Plutôt chaque L'amorce d'expression régulière que vous pouvez trouver n'importe où utilise l'IP comme exemple ! ipv4 + expression régulière obtient 183 000 visites !

Autres conseils

Je l'ai déjà fait, mais j'aime le message de Raymond Chen sur :

http://blogs.msdn.com/oldnewthing/archive/2006/05/22/603788.aspx

Où il préconise essentiellement d'utiliser les expressions rationnelles pour ce pour quoi elles sont bonnes :analyser les jetons.Ensuite, évaluez les résultats.Son exemple :

function isDottedIPv4(s)
{
 var match = s.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/);
 return match != null &&
        match[1] <= 255 && match[2] <= 255 &&
        match[3] <= 255 && match[4] <= 255;
}

Il est beaucoup plus facile de regarder cela et de comprendre ce qu'il est censé faire.

Dans .NET, il existe un type IPAddress qui a une méthode pratique EssayezParse.

Exemple:

if(System.Net.IPAddress.TryParse(PossibleIPAddress, validatedIPAddress)){
    //validatedIPAddress is good
}

// or more simply:
bool IsValidIPAddress(string possibleIP){
    return System.Net.IPAddress.TryParse(PossibleIPAddress, null)
}

Pour IPv4, vous pouvez utiliser cette expression régulière.

\b(?:(?: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]?)\b

Cela semble assez complexe mais cela fonctionne en limitant chaque quad aux nombres 0-255.

@non tranché :c'est vrai, ce problème peut devenir un peu fou.

Si vous avez vraiment besoin de gérer n'importe quelle adresse IP possible, vous devrez créer quelque chose de plus sophistiqué.

Cependant, si vous souhaitez simplement effectuer une validation de base pour vous assurer que les utilisateurs saisissent des données correctement formatées, je pense qu'il est juste de les limiter au modèle a.b.c.d avec les expressions régulières ci-dessus.

@unsliced ​​c'est correct, mais cela dépendra bien sûr de la mise en œuvre, si vous analysez l'adresse IP d'un utilisateur visitant votre site, vous pouvez utiliser l'expression régulière car elle DEVRAIT être au format x.x.x.x.

Pour IPv6, vous pouvez utiliser ceci

[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}:[A-F0-9]{0,4}

cependant, il ne capture pas tout car avec IPv6, c'est beaucoup plus compliqué, selon Wikipédia, tous les exemples suivants sont techniquement corrects, mais l'expression régulière ci-dessus ne capturera que ceux avec un *

2001:0db8:0000:0000:0000:0000:1428:57ab*
2001:0db8:0000:0000:0000::1428:57ab*
2001:0db8:0:0:0:0:1428:57ab*
2001:0db8:0:0::1428:57ab
2001:0db8::1428:57ab
2001:db8::1428:57ab

Étant donné que la moitié de ce regex gère le fait que le dernier segment n'a pas de règle à la fin, vous pouvez le couper en deux si vous ajoutez un «». à la fin de votre éventuelle adresse IP.

Quelque chose comme ça:

bool IsValidIPAddress(string possibleIP){
  CrazyRegex = \b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){4}\b
  return Regex.Match(possibleIP+'.', CrazyRegex)
}

IPv4 devient : /\d\d?\d?.\d\d?\d?.\d\d?\d?.\d\d?\d?/

Je ne suis pas sûr des règles IPv6.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top