VB.NET: Tester un mot de passe

Résolu
Anonyme209 Messages postés 761 Statut Membre -  
Anonyme209 Messages postés 761 Statut Membre -
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

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    

    0
  2. Anonyme209 Messages postés 761 Statut Membre 19
     
    Merci, ça marche.
    0