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

Macros et VBA Excel Discussion :

Problème de RegExp


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur JAVA & PHP
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur JAVA & PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut Problème de RegExp
    Bonjour,

    J'essai de mettre en place une RegExp qui malgré les nombreux tutos que j'ai pu suivre ne fonctionne toujours pas ai-je raté quelque chose?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Function mot_de_passe_valide(expression As String) As Boolean
        Dim regex As New RegExp
        Dim result As Boolean
        regex.IgnoreCase = False
        regex.Global = False
        'doit contenir au moins huit caractères, au moins un chiffre et des lettres majuscules et minuscules et des caractères spéciaux
        regex.Pattern = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-""""]).{8,}$"
         MsgBox "je suis dans la entré fonction"
         result = regex.Test(expression)
        mot_de_passe_valide = result
     
    End Function

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    et des caractères spéciaux
    1) combien au minimum (puisque pluriel) ?
    2) quels sont ces caractères spéciaux acceptables ?

    Il est vraisemblable que cette vérification peut se faire très rapidement sans le poids (important) de REGEX !

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur JAVA & PHP
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur JAVA & PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour

    1) combien au minimum (puisque pluriel) ?
    2) quels sont ces caractères spéciaux acceptables ?

    Il est vraisemblable que cette vérification peut se faire très rapidement sans le poids (important) de REGEX !
    Bonjour,
    On accepte tout les caractères spéciaux.
    Au minimum 1 Maj, 1 min, 1 chiffre, 1 caractère spécial pour un mot de passe de 8 caractère minimum.

    Je reste ouvert a d'autre proposition que REgex car c'est un code que je reprend et que je dois corriger.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    1) Regex (en outre lourdaud) ne serait même pas utilisable sur ma machine, où tout VBS est délibérément inhibé (c'est le cas d'autres machines, pour des raisons de sécurité).
    2) regarde ce que fait par exemple cette fonction (très légère, elle)

    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
    Private Function mot_valable(ch As String) As Boolean
      Dim t, lm As Integer, k As Integer, nb
      If Len(ch) < lmin Then Exit Function
      lm = 8:   nb = Array(0, 0, 0, 0)
      t = Split(StrConv(ch, vbUnicode), Chr(0))
      For i = 0 To UBound(t) - 1
         Select Case t(i)
           Case "A" To "Z": nb(0) = 1
           Case "a" To "z": nb(1) = 1
           Case 0 To 9: nb(2) = 1
           Case Else: nb(3) = 1
         End Select
      Next
      If WorksheetFunction.Sum(nb) = 4 Then mot_valable = True
    End Function
    Que tu utilises ainsi (exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim mot As String
    mot = "a8aa4a/AAAZVV"
    MsgBox mot_valable(mot)

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur JAVA & PHP
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur JAVA & PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut
    Merci pour ton retour et effectivement faire mon propre algo m'aurait certainement pris moins de temps.
    Je ne souhaitais pas réinventer la roue comme s'évertuent à faire entrer dans nos têtes les enseignants.
    En regardant ta fonction je me dit évidemment...
    Mais c'est toujours plus facile à dire une fois qu'on a la solution.

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à vous,

    Unparia,

    Juste pour mon information.

    J'ai bien constaté que ce code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub charac()
    Dim machaine As String, montableau As Variant
    Dim i As Byte
    machaine = "mercatog"
    montableau = Split(StrConv(machaine, vbUnicode), Chr(0))
    For i = 0 To UBound(montableau) - 1
        Debug.Print montableau(i)
    Next
    End Sub
    ...avait pour tâche la décomposition d'une chaîne de caractères en un tableau de ces caractères.
    Pourtant, je n'arrive à m'expliquer ce que produit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    montableau = Split(StrConv(machaine, vbUnicode), Chr(0))
    L'aide Microsoft sur VBUnicode n'est certes pas très explicite, du moins à mon niveau.
    Et pourquoi Chr(0)?

    Au passage, sur le tutoriel de Silkyroad sur les chaînes de caractères, j'ai remarqué l'argument vbFromUnicode qui permet d'associer des nombres (ANSI) à des lettres.
    Cet argument peut être utile.

  7. #7
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    je ne suis pas expert dans les conversions d'octets et autres (j'aimerai m'y pencher), mais je trouve le sujet intéressant

    Les paramètres :
    Citation Envoyé par joss_villiers Voir le message
    Bonjour,
    On accepte tout les caractères spéciaux.
    Au minimum 1 Maj, 1 min, 1 chiffre, 1 caractère spécial pour un mot de passe de 8 caractère minimum.
    Donc si l'on prends ce string "12à3456ABCGA€" on devrait logiquement avoir vrai
    j'ai testé les 2 derniers code déjà pour le résultat (PS : Jacques rien de grave mais je crois qu'il manque le : If Len(MonString) >= 8 then …) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Debug.Print "unparia : pour 12à3456ABCGA€ => résultat = " & mot_valide("12à3456ABCGA€")
    Debug.Print "Arkham46 : pour 12à3456ABCGA€ => résultat = " & motValable2("12à3456ABCGA€")
    unparia : pour 12à3456ABCGA€ => résultat = Vrai
    Arkham46 : pour 12à3456ABCGA€ => résultat = Faux


    Petite précision : testé sur Mac, je ne suis pas sur que cela change grand chose

    Autre petite chose (pardonnez moi si c'est moi qui a une incompréhension) différence de certains caractères selon si l'on passe par Byte ou Asc ?? :
    Exp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub certainCara()
    Dim titi() As Byte
        titi = StrConv("€", vbFromUnicode)
        Debug.Print "via titi => " & titi(0)
        Debug.Print "via Asc => " & Asc("€")
    End Sub
    via titi => 128
    via Asc => 219

    Alors que pour d'autre comme par exemple le "A" … etc, la correspondance est ok
    Pouvez vous me dire ce que j'ai loupé ??
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  8. #8
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    Bonjour Ryu,

    Dans ma fonction motValable2 je considère les caractères accentués comme des caractères spéciaux (ne sachant pas le besoin j'ai fait au plus simple).
    unparia a géré les caractères accentués différemment (considérés comme des lettres non accentuées) dans sa dernière fonction.
    Donc c'est normal qu'on ait pas le même résultat.

    Pour le signe €, j'obtiens 128 dans les deux cas sur Windows.
    Là du coup c'est peut-être du au Mac ?

  9. #9
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Arkham46 merci pour ta réponse
    Que devrais-je faire/chercher (quelle direction) pour comprendre d'où vient le résultat Asc("€") => 219 ??

    Apparemment, je devrais peut être plus me fier à l'avenir, pour le résultat des caractères spéciaux,
    ceux dont le résultat sont donnés par Byte !!??
    Surtout pour du code transverse Mac/PC !! ??

    Edit : Chr(128) me donne : Ä sur Mac
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

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

Discussions similaires

  1. URL Rewriting problème de regexp ?
    Par pierrickg dans le forum Apache
    Réponses: 2
    Dernier message: 10/07/2007, 13h35
  2. Un petit problème de regExp
    Par guidav dans le forum VBA Access
    Réponses: 4
    Dernier message: 31/05/2007, 17h36
  3. Probléme de regexp
    Par moook dans le forum Langage
    Réponses: 4
    Dernier message: 17/04/2007, 11h17
  4. Problème de regexp
    Par vodevil dans le forum Langage
    Réponses: 1
    Dernier message: 08/12/2006, 21h28
  5. Gros problème avec regexp
    Par dmbsys dans le forum ASP
    Réponses: 6
    Dernier message: 29/04/2006, 16h23

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