VB.NET: Tester un mot de passe [Résolu/Fermé]

Signaler
Messages postés
677
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
10 juin 2020
-
Messages postés
677
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
10 juin 2020
-
Bonjour,

lors de la première ouverture du programme, l'utilisateur doit rentrer un mot de passe qui sera plus tard requis pour ré-ouvrir le programme.
Je voudrais tester ce mot de passe pour voir s'il il a les conditions suivantes:
-Il est compris entre 8 et 500 caractères.
-Il contient au moins une minuscule
-Il contient au moins une majuscule
-Il contient au moins un chiffre
(Il peut contenir n'importe quel autre caractère)

J'ai trouvé ce code:

   Dim maregex As New System.Text.RegularExpressions.Regex("^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)([\w]{8,500})$")
        If maregex.IsMatch(TextBox1.Text) Then
         'mot de passe valide
        Else
        'mot de passe invalide
        End If


Mais, comme
[\w]
l'indique, le mot de passe n'est plus valide s'il y a un autre caractère que les caractères alphanumériques.
J'ai essayé en remplaçant
([\w]{8,500})
par
{8,500}
, mais le mot de passe n'est maintenant jamais validé.

2 réponses

Messages postés
7106
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
3 décembre 2020
582
Bonjour,

Voici une function paramétrable :
Nombre minimum et maximum de caractères du password
Nombre de minuscules et majuscules
Nombre de chiffres
Nombre de caractères spéciaux

 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        MsgBox("Votre mot de passe " & TextBox1.Text & " est: " & ValidatePassword(TextBox1.Text))
    End Sub
    Function ValidatePassword(ByVal pwd As String,
    Optional ByVal minLength As Integer = 8,
     Optional ByVal maxLength As Integer = 500,
    Optional ByVal numUpper As Integer = 2,
    Optional ByVal numLower As Integer = 2,
    Optional ByVal numNumbers As Integer = 2,
    Optional ByVal numSpecial As Integer = 2) As Boolean
       'a modifier suivant les besoins ci-dessus
        ' Replace [A-Z] with \p{Lu}, to allow for Unicode uppercase letters. 
        Dim upper As New System.Text.RegularExpressions.Regex("[A-Z]")
        Dim lower As New System.Text.RegularExpressions.Regex("[a-z]")
        Dim number As New System.Text.RegularExpressions.Regex("[0-9]")
        ' Special is "none of the above". 
        Dim special As New System.Text.RegularExpressions.Regex("[^a-zA-Z0-9]")

        ' Check the length. 
        If Len(pwd) < minLength Then Return False
        If Len(pwd) > maxLength Then Return False
        ' Check for minimum number of occurrences. 
        If upper.Matches(pwd).Count < numUpper Then Return False
        If lower.Matches(pwd).Count < numLower Then Return False
        If number.Matches(pwd).Count < numNumbers Then Return False
        If special.Matches(pwd).Count < numSpecial Then Return False

        ' Passed all checks. 
        Return True
    End Function

Messages postés
677
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
10 juin 2020
14
Merci, ça marche.