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 ?
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}$"
Vous pouvez utiliser cette regex:
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$
Cette expression rationnelle appliquera ces règles:
(?=.*?[A-Z])
(?=.*?[a-z])
(?=.*?[0-9])
(?=.*?[#?!@$%^&*-])
.{8,}
(avec les ancres)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.
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:
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 ...
8
caractères1
caractère numérique1
minuscule 1
lettre majuscule 1
caractère spécial/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s]).{8,}$/
JSFiddle Link - démonstration simple couvrant divers cas
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/>');
});
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)
});
Essaye celui-là:
Expression:
"/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&.])[A-Za-z\d$@$!%*?&.]{6, 20}/"
Caractères spéciaux facultatifs:
Expression:
"/^(?=.*\d)(?=.*[a-zA-Z]).{6,20}$/"
Si les conditions minimale et maximale ne sont pas requises, supprimez .{6, 16}
.
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}$/
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
}
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);
}
(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+-]).{6}
@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,}$
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:
\w
car cela inclut _
, pour lequel je teste.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
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.
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})
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);
}
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.
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
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
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,}$"
(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$
Lien de vérification en ligne https://regex101.com/r/mqGurh/1
J'espère que le ci-dessous fonctionne. J'ai essayé cela dans la stratégie personnalisée Azure.
^ (? =. [az]) (? =. [AZ]) (? =.\d) (? =. [@ # $% ^ & * -_ + = [] {} | \: ',?/~"();!])([A-Za-z\d@#$%^&*\-_+=[\]{}|\\:',?/
~ "() ;!] |. (?! @)) {6,16} $