IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

regex de validation d'ip


Sujet :

Langage Delphi

  1. #1
    Membre habitué Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Points : 188
    Points
    188
    Par défaut regex de validation d'ip
    bonjour,

    j'ai testé je ne sais pas trop combien de code regex mais toujours la même galère, j'arrive toujours pas a finioler mon code, en fait j'ai une premiere fonction qui permet de divisé une ip (je la mais pour pouvoir comprendre le reste ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    function Explode(Text, Separator: String): TArrayOfDString;
        var
          Index, LenSeparator, aPos: LongInt;
          lignes: TArrayOfDString;
        begin
          try
            LenSeparator := Length(Separator);
            aPos := Pos(Separator, Text);
            //Application.MessageBox(PChar(balises[i][0] + ' ' + balises[i][1]),'Essai');
            if(aPos <> 0) then
              while (aPos <> 0) do
                begin
                  if(Text[aPos+1] = '.') then Text[aPos+1] := '0';
                  setlength(lignes, length(lignes)+1);
                  lignes[length(lignes)-1] := Strtoint(Copy(Text, 1, aPos - 1));
                  Delete(Text, 1, aPos + Length(Separator)-1);
                  aPos := Pos(Separator, Text);
                end
            else
                begin
                     setlength(lignes, length(lignes)+1);
                     lignes[length(lignes)-1] := Strtoint(Copy(Text, 1, length(Text)));
                end;
          finally
            Result := lignes;
          end;
        end;
    puis par la suite je met un code regex, bon ici c'en est un totalement a l'arrache j'ai abandonné apres une trentraine d'essais :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    procedure TForm2.Edit1Change(Sender: TObject);
    var LesChaines: TArrayOfDString;
    begin
          Memo1.Clear;
           // verifip((Sender as TEdit).Text, memo1.Lines,false,['.']);
          if(MatchesMask((Sender as TEdit).Text,'[0-9]*[0-9]*[0-9]*.[0-9]*[0-9]*[0-9]*.[0-9]*[0-9]*[0-9]*.[0-9]*[0-9]*[0-9]*')) then
                   LesChaines := Explode((Sender as TEdit).Text , '.' );
     
           if(LesChaines <> nil) then
            try
              if (LesChaines[0] = 0 ) or (LesChaines[1] = 0 ) or (LesChaines[2] = 0 ) or (LesChaines[3] = 0 ) then
                 begin
                   (Sender as TEdit).Color := clRed;
                   BitBtn1.Enabled := false;
                 end
              else
              begin
                  if (LesChaines[0] < 256) and (LesChaines[0] > 0)
                  and (LesChaines[1] < 256) and (LesChaines[1] >= 0)
                  and (LesChaines[2] < 256) and (LesChaines[2] >= 0)
                  and (LesChaines[3] < 256) and (LesChaines[3] > 0) then
                  begin
                       (Sender as TEdit).Color := clWhite;
                       BitBtn1.Enabled := true;
                  end
                  else
                  begin
                       (Sender as TEdit).Color := clRed;
                       BitBtn1.Enabled := false;
                  end
              end
            except
            on EConvertError do (Sender as TEdit).Color := clRed;
            on EAccessViolation do (Sender as TEdit).Color := clRed;
            end
         else
           begin
                (Sender as TEdit).Color := clRed;
                BitBtn1.Enabled := false;
           end;
    end;
    en bref, l'ip est fausse ça me fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                       (Sender as TEdit).Color := clRed;
                       BitBtn1.Enabled := false;
    elle est bonne j'obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                       (Sender as TEdit).Color := clWhite;
                       BitBtn1.Enabled := true;

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 435
    Points : 5 848
    Points
    5 848
    Par défaut
    salut

    si c'est une expression reguliere que tu veut pour controler
    ton adresse ip voici l'expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '^((25[0-5]|2[0-4]\d|1?\d?\d).){3}(25[0-5]|2[0-4]\d|1?\d?\d)$'
    bon on va expliquer un peu comment elle fonctionne
    ^ C'est pour attacher en debut de chaine
    ( on ouvre une parenthese pour creer un ensemble
    ( 25[0-5] le nombre peut etre 25-0..5
    | ou
    2[0-4]\d 2-0..4-0..9
    | ou
    1?\d?\d 1 (chiffre non obligatoir)-0..9 (chiffre non obligatoir)-0..9
    ) fermer le groupe
    . on met un point
    )fermer le groupe
    {3} C'est pour repeter n fois l'expression precedente

    et on recommence le meme test sans le point ce qui nous donne 3 triplet avec 1 point et 1 triplet

    $ le dollar et la pour indiquer que l'element precedent doit etre en fin de chaine

    a toi d'utiliser les bonne fonction pour interpreter l'expresion reguliere

    @+ Phil

  3. #3
    Membre habitué Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    ton expression réguliere serait plutot pour calculer un masque de sous reseau nan?? je l'avais aussi testé mais je n'arrivais pas a passer dans mon if :s

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 435
    Points : 5 848
    Points
    5 848
    Par défaut
    salut

    adresse IP et adresse de sous reseau meme combat
    je ne sais pas si tu connait le reseaux mais l'adresse IP
    a les meme caracterisitique que le masque de sous reseaux celui-ci servant a decomposer en n reseaux le reseaux primaire

    de quel if tu me parle
    tu demande une expression reguliere je te la fournit avec les explications maintenant j'ai pas regardé le composant que tu utilise pour lire cet expression


    @+ Phil
    PS : met le tag resolue si la reponse te convient

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Pour info voir les liens cités dans ce tuto :
    http://lgmorand.developpez.com/dotnet/regex/

    Notamment celui-ci :
    http://regexlib.com/Search.aspx

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [vb2010] Regex pour valider un mail
    Par pape0 dans le forum VB.NET
    Réponses: 2
    Dernier message: 11/12/2010, 09h57
  2. [RegExp] regex et validation de formulaire
    Par Elyphany dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/12/2010, 04h35
  3. Réponses: 2
    Dernier message: 02/06/2010, 13h12
  4. [RegEx] Regex pour valider une somme (argent)
    Par Jimmy_S dans le forum Langage
    Réponses: 1
    Dernier message: 02/04/2009, 19h29
  5. Trouver un regex de validation de pseudo
    Par Hindioumax dans le forum Langage
    Réponses: 26
    Dernier message: 23/06/2006, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo