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 :

Détecter le type de chaîne en vue d'un tri avec les expressions régulières


Sujet :

Langage Delphi

  1. #21
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut Ajout d'un test email ;) @paul
    Bonjour,
    je rajoute un test pour les e-mails avec un petit raffinement pour le tri, la possibilité de faire le tri classique ou par domaine+nom
    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
     
      function ExprMail(const S : String; var V : String; tripardomaine : Boolean = False):  TSortTypeInterne;
      var Expr : TRegEx;
          Match : TMatch;
          const Expression = '(?<Nom>[a-zA-Z0-9_\-\.]+)@'+
          '(?<Domaine>((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|'+
          '(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3}))';
      begin
        Expr:=TRegEx.Create(Expression,[roExplicitCapture]);
        Match:=Expr.Match(S);
        if Match.Success then
          begin
            if triparDomaine then V:=Match.Groups['Domaine'].Value+Match.Groups['Nom'].Value
                    else V:=S;
            result:=stiEmail;
          end
          else begin
            V:=S;
            result:=stiText;
          end;
      end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #22
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Depuis un petit moment les extensions des adresses sont libres je peux avoir un domaine www.domaine.monsiteperso et donc l'email associé, il faudrait repousser la limite des 4 caractères à la fin

  3. #23
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    l'expression fonctionne déjà pour ce genre d'adresse
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #24
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    l'expression fonctionne déjà pour ce genre d'adresse
    mais le groupe "domaine" s'arrête à 4 caractères après le point

  5. #25
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    J'ai peut être fait une erreur de copie, mais dans mon programme c'est ok
    je ne refais donc qu'un copier coller de l'expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          const Expression = '(?<Nom>[a-zA-Z0-9_\-\.]+)@'+
          '(?<Domaine>((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|'+
          '(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3}))';
    mais je crois bien qu'elles sont identiques (flemme de vérifier ma séance de kiné m'a rincé)

    comme tu m'as mis le doute voici 2 petites images
    1- résultat "normal"
    Nom : CaptureMailCheck.PNG
Affichages : 80
Taille : 3,1 Ko
    2- résultat avec d'abord le nom de domaine (tripardomaine=true)
    Nom : CaptureMailCheckDomaine1.PNG
Affichages : 79
Taille : 2,7 Ko
    et effectivement il y a une petite c...e avec l'expression je corrigerai ce w.e.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #26
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour, pour les emails !

    Après avoir longtemps cherché je suis "tombé" sur ce site
    Beaucoup plus complexe mais correspondant aux normes RFC5322 et RFC1035

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    (?<Nom>(\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*
     |  "(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]
          |  \\[\x01-\x09\x0b\x0c\x0e-\x7f])*"))
    @ (?<Domaine>(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
      |  \[(?:(?: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]?|[a-z0-9-]*[a-z0-9]:
              (?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]
              |  \\[\x01-\x09\x0b\x0c\x0e-\x7f])+)
         \])\z))
    toutefois, celle-ci, plus simple (pas d'adresse IP) devrait couvrir les besoins
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    \A(?<Nom>[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*)@
    (?<Domaine>(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\z
    si vous continuez à lire la partie du site indiqué vous verrez qu'il devrait y avoir en plus un test de longueur, l'expression devient alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (?<Nom>\A(?=[a-z0-9@.!#$%&'*+/=?^_`{|}~-]{6,254}\z)
     (?=[a-z0-9.!#$%&'*+/=?^_`{|}~-]{1,64}@)
     [a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*)
    @ (?<Domaine>(?:(?=[a-z0-9-]{1,63}\.)[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+
      (?=[a-z0-9-]{1,63}\z)[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\z
    mais comme le dit cet auteur il faudra vérifier pour que cela réponde a vos besoins

    NB: j'ai préféré rajouter les groupes Nom et Domaine plutôt qu'éplucher les différents groupes établis
    il ne vous reste plus qu'à choisir et changer dans le source un peu plus haut
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #27
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    @SergioMaster

    Pardon, j'ai un peu décroché pendant quelques jours mais est-ce que tu pourrais expliquer à quoi sert l'option roExplicitCapture ?
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  8. #28
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    @SergioMaster

    Pardon, j'ai un peu décroché pendant quelques jours mais est-ce que tu pourrais expliquer à quoi sert l'option roExplicitCapture ?
    Le roExplicitCapture permet d'indiquer que pour être capturé les groupes doivent être de la forme (?<groupe>...) comme l'écrit Sergio

  9. #29
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par retwas Voir le message
    Le roExplicitCapture permet d'indiquer que pour être capturé les groupes doivent être de la forme (?<groupe>...) comme l'écrit Sergio
    Merci !
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

Discussions similaires

  1. [Free Pascal] Validateur de chaîne FEN utilisant les expressions régulières
    Par Roland Chastain dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 03/10/2014, 10h40
  2. Validation d'une chaîne FEN par les expressions régulières
    Par Roland Chastain dans le forum Delphi
    Réponses: 10
    Dernier message: 01/10/2014, 20h27
  3. Réponses: 3
    Dernier message: 28/07/2014, 01h48
  4. Recherche de chaîne avec une expression régulière complexe
    Par mdriesbach dans le forum Général Python
    Réponses: 4
    Dernier message: 28/07/2009, 22h46
  5. [FAQ] Comment tester une chaîne de caractères avec une expression régulière ?
    Par Baptiste Wicht dans le forum Vos Contributions VBScript
    Réponses: 1
    Dernier message: 20/11/2007, 19h43

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