Expression régulière pour mot de passe (au moins 2 chiffres et un caractère spécial et la longueur minimale 8)

j'ai cherché une expression régulière qui accepte au moins deux chiffres et un caractère spécial et la longueur minimale du mot de passe est de 8. Jusqu'à présent, j'ai fait ce qui suit:[0-9a-zA-Z!@#$%0-9]*[!@#$%0-9]+[0-9a-zA-Z!@#$%0-9]*

10
demandé sur HamZa 2013-10-21 14:11:15

6 réponses

quelque Chose comme cela devrait faire l'affaire.

^(?=(.*\d){2})(?=.*[a-zA-Z])(?=.*[!@#$%])[0-9a-zA-Z!@#$%]{8,}

(?=(.*\d){2}) - uses lookahead (?=) and says the password must contain at least 2 digits

(?=.*[a-zA-Z]) - uses lookahead and says the password must contain an alpha

(?=.*[!@#$%]) - uses lookahead and says the password must contain 1 or more special characters which are defined

[0-9a-zA-Z!@#$%] - dictates the allowed characters

{8,} - says the password must be at least 8 characters long

il pourrait avoir besoin d'un peu de peaufinage par exemple en spécifiant exactement quels caractères spéciaux vous avez besoin, mais il devrait faire l'affaire.

29
répondu Urbley 2015-12-21 09:51:56

Il n'y a aucune raison, quelle qu'elle soit, de mettre en œuvre toutes les règles dans un seul regex. Pensez à le faire comme ceci:

Pattern[] pwdrules = new Pattern[] {
    Pattern.compile("........"),   // at least 8 chars
    Pattern.compile("\d.*\d"),     // 2 digits
    Pattern.compile("[-!"§$%&/()=?+*~#'_:.,;]") // 1 special char
  }

String password = ......;
boolean passed = true;

for (Pattern p : pwdrules) {
    Matcher m = p.matcher(password);
    if (m.find()) continue;
    System.err.println("Rule " + p + " violated.");
    passed = false;
}

if (passed) { .. ok case.. }
else { .. not ok case ... }

ceci a l'avantage supplémentaire que les règles passwort peuvent être ajoutées, supprimées ou modifiées sans effort. Ils peuvent même résider dans un fichier de ressources.

en outre, il est juste plus lisible.

8
répondu Ingo 2013-10-21 12:54:17

essayez ce regex. Il utilise lookahead pour vérifier qu'il y a au moins deux chiffres et un des caractères spéciaux énumérés par vous.

^(?=.*?[0-9].*?[0-9])(?=.*[!@#$%])[0-9a-zA-Z!@#$%0-9]{8,}$ 

explication

^ #Match start of line.

(?=.*?[0-9].*?[0-9]) #Look ahead and see if you can find at least two digits. Expression will fail if not.

(?=.*[!@#$%]) #Look ahead and see if you can find at least one of the character in bracket []. Expression will fail if not.

[0-9a-zA-Z!@#$%0-9]{8,} #Match at least 8 of the characters inside bracket [] to be successful.

$ # Match end of line. 
3
répondu edi_allen 2013-10-21 10:36:19

Essayez celui-ci:

^(?=.*\d{2,})(?=.*[$-/:-?{-~!"^_`\[\]]{1,})(?=.*\w).{8,}$

Voici comment cela fonctionne très prochainement:

  • (?=.*\d{2,}) cette partie disant sauf au moins 2 chiffres
  • (?=.*[$-/:-?{-~!"^_[]]{1,})` ce sont des caractères spéciaux, au moins 1
  • (?=.*\w) et le repos sont les lettres (égal à [A-Za-z0-9_])
  • .{8,}$ celui-ci indique au moins 8 caractères incluant toutes les règles précédentes. Ci-dessous est la carte pour regexp courant (fait avec l'aide de Regexper) Regexp map UPD

Regexp devrait ressembler à ceci ^(?=(.*\d){2,})(?=.*[$-\/:-?{-~!"^_'\[\]]{1,})(?=.*\w).{8,}$ Découvrez les commentaires pour plus de détails.

3
répondu Valerii 2013-10-21 11:19:17

essaye ceci : ^.*(?=.{8,15})(?=.*\d)(?=.*\d)[a-zA-Z0-9!@#$%]+$

s'il vous Plaît lire ci-dessous le lien pour faire le mot de passe de l'expression régulière de la politique:-

expression Regex pour les règles de mot de passe

0
répondu kaushik0033 2017-05-23 12:34:33

expressions régulières définir une structure sur la chaîne que vous essayez de faire correspondre. Sauf si vous définissez une structure spatiale sur votre regex (par exemple au moins deux chiffres suivis d'un caractère spécial, suivi de ...) vous ne pouvez pas utiliser un regex pour valider votre chaîne.

0
répondu user278064 2013-10-21 10:36:27