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!
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.