Validation d'une adresse ip

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 672 fois - Téléchargée 31 fois

Contenu du snippet

Voici une sous-routine qui permet de valider une chaîne de caractère. Si celle-ci représente une adresse IP (allant de 0.0.0.0 à 255.255.255.255), la routine retourne TRUE. Si la string ne correspond pas à une adresse IP, la routine retourne FALSE.

Source / Exemple :


Function ValidIP( aIP : String ) : Boolean;
{ Détermine si la string passée en paramètre est une adresse IP }
var
  iNb,
  iVal   : Integer;
  bOK    : Boolean;
  sTmp,
  sTmpIP : String;
begin
  bOK := True;

  iNb := 0;
  sTmpIP := aIP;
  Repeat
    if Pos( '.', sTmpIP ) > 0 then
    begin
      { Récupération du premier nombre de la chaine sTmpIP }
      sTmp := Copy( sTmpIP, 1, Pos( '.', sTmpIP ) - 1 );
      { On enlève le nombre qui vient d'être lu par sTmp }
      sTmpIP := Copy( sTmpIP, Pos( '.', sTmpIP ) + 1, Length( sTmpIP ) );
    end
    else
    begin
      sTmp := sTmpIP; { Récupération du nombre restant dans la chaine sTmpIP }
      sTmpIP := ''; { Il n'y a plus rien à lire }
    end;

    { Vérification s'il s'agit d'un nombre }
    Try
      iVal := StrToInt( sTmp );
      if (iVal > 255) or (iVal < 0) then { Si le nombre > 255 ou < 0, ce n'est pas une adresse IP }
        bOk := False
      else
        inc( iNb ); { Maintenir le compte de chiffres dans la chaine }
    except
      { Si on arrive à cette erreur, il ne s'agit pas d'un nombre }
      On E : EConvertError do bOK := False; 
    end;
  { Boucler jusqu'à ce qu'on passe au travers de la chaine ou qu'il y ait une erreur }
  until ( sTmpIP = '' ) or not bOK;

  { S'il n'y a pas 4 nombres, ce n'est pas une adresse IP }
  if iNb <> 4 then bOK := False;

  Result := bOK;
end;

Conclusion :


Merci à tous ceux qui m'ont rapporté ou qui vont me rapporter des bugs!

A voir également

Ajouter un commentaire Commentaires
Messages postés
14
Date d'inscription
mardi 29 janvier 2002
Statut
Membre
Dernière intervention
18 février 2016
1
Nono40: T'as raison, -1.-1.-1.-1 c'est chercher la bébête... :-) Merci pour l'info, j'ai modifié le source en conséquence (une simple condition supplémentaire à un if et le tour est joué!)
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
2
Tiens ? pour moi 192.168.0.2. ne plante pas...
Par contre, vous allez me dire que je cherche la petite bête mais -1.-1.-1.-1 est une addresse valide...
Messages postés
329
Date d'inscription
mercredi 4 avril 2001
Statut
Membre
Dernière intervention
8 décembre 2009
6
non , c ke kan on met '192.168.0.2.' ca plante avec un joli message d'erreur
Messages postés
654
Date d'inscription
lundi 14 janvier 2002
Statut
Membre
Dernière intervention
20 février 2005

d'abord, ds un edit, tu mets une limite pour l'ip : 255.255.255.255 et le chiffre le
plus grand possible (enfin 3 chiffre chaque fois) donc 15 caractères si je me trompes pas...
Messages postés
14
Date d'inscription
mardi 29 janvier 2002
Statut
Membre
Dernière intervention
18 février 2016
1
Merci du commentaire, fabiin.

J'ai corrigé le bug qui servenait lorsque les deux derniers nombres étaient identiques.

Je ne comprends pas ce que tu veux dire pour le '.' à la fin d'une IP valide. Veux-tu dire qu'une chaine ressemblant à '192.168.0.2.' devrait être valide?
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (garnotte)