web-dev-qa-db-fra.com

Les expressions rationnelles pour mot de passe doivent contenir au moins huit caractères, au moins un chiffre, ainsi que des lettres majuscules et minuscules et des caractères spéciaux.

Je veux une expression régulière pour vérifier cela:

Un mot de passe contient au moins huit caractères, dont au moins un chiffre, ainsi que des lettres majuscules et minuscules et des caractères spéciaux, par exemple #, ?, !.

Il ne peut pas s'agir de votre ancien mot de passe ou contenir votre nom d'utilisateur, "password" ou "websitename"

Et voici mon expression de validation qui consiste en huit caractères, dont une lettre majuscule, une lettre minuscule et un chiffre ou un caractère spécial.

(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

Comment puis-je l'écrire pour un mot de passe doit comporter huit caractères, dont une lettre majuscule, un caractère spécial et des caractères alphanumériques ?

287

Minimum huit caractères, au moins une lettre et un chiffre:

"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"

Minimum huit caractères, au moins une lettre, un chiffre et un caractère spécial:

"^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$"

Minimum huit caractères, au moins une lettre majuscule, une lettre minuscule et un chiffre:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"

Minimum huit caractères, au moins une lettre majuscule, une lettre minuscule, un chiffre et un caractère spécial:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$"

Minimum 8 et maximum 10 caractères, au moins une lettre majuscule, une lettre minuscule, un chiffre et un caractère spécial:

"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,10}$"
827
Srinivas

Vous pouvez utiliser cette regex:

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

Cette expression rationnelle appliquera ces règles:

  • Au moins une lettre majuscule lettre anglaise , (?=.*?[A-Z])
  • Au moins une lettre anglaise minuscule, (?=.*?[a-z])
  • Au moins un chiffre, (?=.*?[0-9])
  • Au moins un caractère spécial, (?=.*?[#?!@$%^&*-])
  • Longueur minimale de huit .{8,} (avec les ancres)
252
anubhava

Les expressions régulières n'ayant pas d'opérateur AND, il est donc assez difficile d'écrire une expression rationnelle qui correspond à des mots de passe valides, lorsque la validité est définie par quelque chose ET quelque chose d'autre ET d'autre chose ...

Cependant, les expressions régulières ayant un opérateur OR, appliquez simplement le théorème de DeMorgan et écrivez une expression régulière qui correspond à des mots de passe non valides:

Tout ce qui contient moins de huit caractèresOUtout ce qui n’a pas de chiffresOUtout ce qui n’a pas de majusculeOUou tout ce qui n’a pas de minusculeOUtout ce qui n’est pas caractères spéciaux.

Alors:

^(.{0,7}|[^0-9]*|[^A-Z]*|[^a-z]*|[a-zA-Z0-9]*)$

Si quelque chose correspond à cela, alors c'est un mot de passe invalide.

48
Matt Timmermans

Juste une petite amélioration pour la réponse de @ anubhava: comme les caractères spéciaux sont limités à ceux du clavier, utilisez ceci pour n’importe quel caractère spécial:

^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$

Cette regex appliquera ces règles:

  • Au moins une lettre anglaise majuscule
  • Au moins une lettre anglaise minuscule
  • Au moins un chiffre
  • Au moins un caractère spécial
  • Minimum huit de longueur
30
Edwin Beltran

J'ai eu du mal à suivre la réponse la plus populaire pour ma situation. Par exemple, ma validation échouait avec des caractères tels que ; ou [. La liste blanche de mes caractères spéciaux ne m'intéressant pas, je me suis donc tournée vers [^\w\s] en tant que test - tout simplement - pour faire correspondre des caractères autres que Word (y compris numériques) et des espaces non blancs. Pour résumer, voici ce qui a fonctionné pour moi ...

  • au moins 8 caractères
  • au moins 1 caractère numérique
  • au moins 1 minuscule 
  • au moins 1 lettre majuscule 
  • au moins 1 caractère spécial

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/

JSFiddle Link - démonstration simple couvrant divers cas

20
scniro

Une version plus "générique" (?), N'autorisant aucune lettre anglaise comme caractères spéciaux .

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

var pwdList = [
    '@@V4-\3Z`zTzM{>k',
    '12qw!"QW12',
    '123qweASD!"#',
    '1qA!"#$%&',
    'Günther32',
    '123456789',
    'qweASD123',
    'qweqQWEQWEqw',
    '12qwAS!'
  ],
  re = /^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$/;
  
  pwdList.forEach(function (pw) {
    document.write('<span style="color:'+ (re.test(pw) ? 'green':'red') + '">' + pw + '</span><br/>');
  });

12
SamWhan

Importez le fichier JavaScript jquery.validate.min.js.

Vous pouvez utiliser cette méthode:

$.validator.addMethod("pwcheck", function (value) {
    return /[\@\#\$\%\^\&\*\(\)\_\+\!]/.test(value) && /[a-z]/.test(value) && /[0-9]/.test(value) && /[A-Z]/.test(value)
});
  1. Au moins une lettre anglaise majuscule
  2. Au moins une lettre anglaise minuscule
  3. Au moins un chiffre
  4. Au moins un caractère spécial
11
Vikram

Essaye celui-là:

  1. Minimum six caractères
  2. Au moins un caractère majuscule
  3. Au moins un caractère minuscule
  4. Au moins un caractère spécial

Expression:

"/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/"

Caractères spéciaux facultatifs:

  1. Au moins un caractère spécial
  2. Au moins un numéro
  3. Les caractères spéciaux sont facultatifs
  4. Minimum six caractères et maximum 16 caractères

Expression:

"/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"

Si les conditions minimale et maximale ne sont pas requises, supprimez .{6, 16}.

  • 6 est la limite minimale de caractères
  • 20 est la limite de caractères maximale
  • ? = signifie que l'expression correspond
9
ojus kulkarni
Use the following Regex to satisfy the below conditions:

Conditions: 1] Min 1 uppercase letter.
            2] Min 1 lowercase letter.
            3] Min 1 special character.
            4] Min 1 number.
            5] Min 8 characters.
            6] Max 30 characters.

Regex: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,30}$/    
6
SHASHANK HONRAO

Ne répond pas directement à la question, mais faut-il vraiment qu'il s'agisse d'une regex?

J'avais l'habitude de faire beaucoup de Perl et je m'étais habitué à résoudre des problèmes avec les expressions rationnelles. Cependant, quand ils deviennent plus compliqués avec toutes les anticipations et autres bizarreries, vous devez écrire des dizaines de tests unitaires pour éliminer tous ces petits bugs.

De plus, une expression rationnelle est généralement quelques fois plus lente qu'un impératif ou une solution fonctionnelle.

Par exemple, la fonction Scala suivante (pas très FP) résout la question initiale environ trois fois plus vite que l'expression régulière de la réponse la plus populaire. Ce qu'il fait est également si clair que vous n'avez pas du tout besoin d'un test unitaire:

def validatePassword(password: String): Boolean = {
  if (password.length < 8)
    return false

  var lower = false
  var upper = false
  var numbers = false
  var special = false

  password.foreach { c =>
    if (c.isDigit)       numbers = true
    else if (c.isLower)  lower = true
    else if (c.isUpper)  upper = true
    else                 special = true
  }

  lower && upper && numbers && special
}
4
Heikki Salokanto

Selon vos besoins, ce modèle devrait fonctionner correctement. Essaye ça,

^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}

Créez simplement une variable chaîne, affectez le modèle et créez une méthode booléenne qui renvoie true si le modèle est correct, sinon false.

Échantillon:

String pattern = "^(?=(.*\d){1})(.*\S)(?=.*[a-zA-Z\S])[0-9a-zA-Z\S]{8,}";
String password_string = "Type the password here"

private boolean isValidPassword(String password_string) {
    return password_string.matches(Constants.passwordPattern);
}
3
Arun Sivanandan
(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+-]).{6}
2
shiyani suresh

@ClasG a déjà suggéré :

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,}$

mais il n'accepte pas _ (trait de soulignement) en tant que caractère spécial (par exemple, Aa12345_).

Une amélioration est:

^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*([^\w\s]|[_]))\S{8,}$
2
SONewbiee

J'ai trouvé beaucoup de problèmes ici, alors j'ai créé le mien.

Le voici dans toute sa gloire, avec des tests: 

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([^a-zA-Z\d\s])).{9,}$

https://regex101.com/r/DCRR65/4/tests

Les choses à surveiller:

  1. n'utilise pas \w car cela inclut _, pour lequel je teste.
  2. J'ai eu beaucoup de problèmes pour faire correspondre les symboles, sans faire correspondre la fin de la ligne.
  3. Ne spécifie pas spécifiquement les symboles, cela est également dû au fait que différents paramètres régionaux peuvent avoir différents symboles sur leurs claviers qu'ils peuvent utiliser.
1
Stefano

Utilisez les expressions rationnelles suivantes pour satisfaire les conditions ci-dessous:

Conditions: 1] Min 1 special character.
            2] Min 1 number.
            3] Min 8 characters or More

Regex: ^(?=.*\d)(?=.*[#$@!%&*?])[A-Za-z\d#$@!%&*?]{8,}$

Peut tester en ligne: https://regex101.com

1
Samrat Saha

Nous pouvons simplement faire cela en utilisant HTML5.

Utilisez le code ci-dessous dans l'attribut de motif,

pattern="(?=^.{8,}$)((?=.*\d)(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$"

Cela fonctionnera parfaitement.

1
Vidya

Vous pouvez utiliser le modèle d'expression régulière ci-dessous pour vérifier si le mot de passe correspond ou non à vos attentes.

((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~!@#$%^&*()]).{8,20})
1
Harshal_Kalavadiya

Essaye ça:

^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$

Cette expression régulière fonctionne parfaitement pour moi.

function myFunction() {
    var str = "c1TTTTaTTT@";
    var patt = new RegExp("^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])[a-zA-Z0-9@#$%^&+=]*$");
    var res = patt.test(str);
    console.log("Is regular matches:", res);
}
0
Kiwi Rupela

Motif correspondant à au moins 1 caractère majuscule, 1 chiffre et tout caractère spécial et longueur comprise entre 8 et 63.

"^ (? =. [a-z]) (? =. [A-Z]) (? =. *\d) [a-zA-Z\d\W] {8,63} $"

Ce modèle a été utilisé pour la programmation Java.

0
Anup Seth

En fait, je viens de copier la première réponse ici et de la transformer en une plus expression rationnelle ux-commode qui nécessite un caractère supérieur, un caractère inférieur et au moins 8 caractères, mais accepte tout ce qui se trouve "entre les deux".

Celui-ci est un exemple-regex qui nécessite

  1. au moins 8 caractères
  2. au moins une lettre minuscule
  3. au moins une lettre majuscule

IMPORTANT: Cette expression rationnelle sauf tous les autres caractères, par exemple les nombres, les caractères spéciaux tels que $, #,! etc. - aussi longtemps que les règles 1. à 3. correspondre à la chaîne d'entrée

^(?=.*[a-z])(?=.*[A-Z]).{8,}$

Faites attention au "." presque à la fin de la regex. Cela correspondra à presque tous les caractères (et autant que je sache), lisibles

0
Frithjof Schaefer

En Java/Android, pour tester un mot de passe avec au moins un chiffre, une lettre, un caractère spécial selon le modèle suivant:

"^(?=.*[A-Za-z])(?=.*\\d)(?=.*[$@$!%*#?&])[A-Za-z\\d$@$!%*#?&]{8,}$"
0
Dadaji
(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$

Lien de vérification en ligne https://regex101.com/r/mqGurh/1

0
Tai Ho

J'espère que le ci-dessous fonctionne. J'ai essayé cela dans la stratégie personnalisée Azure.

^ (? =. [az]) (? =. [AZ]) (? =.\d) (? =. [@ # $% ^ & * -_ + = [] {} | \: ',?/~&quot;();!])([A-Za-z\d@#$%^&amp;*\-_+=[\]{}|\\:',?/ ~ "() ;!] |. (?! @)) {6,16} $

0
Venkatesh