web-dev-qa-db-fra.com

Le mot de passe doit comporter au moins un caractère non alpha.

J'ai besoin d'une expression régulière pour un mot de passe. Le mot de passe doit contenir au moins 8 caractères. Au moins un caractère doit être un chiffre ou un caractère spécial (pas une lettre).

[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 8)]
[RegularExpression(@"(?=.*\W)?(?=.*\d)", ErrorMessage = "Error message")]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }

J'ai une validation de longueur, mais j'ai besoin d'aide avec une expression régulière qui vérifie si le mot de passe contient au moins un chiffre ou un caractère spécial.

Exemples de mots de passe valides:

testtest85*
testtes*
testtes1
test1234*+

Exemples de mots de passe non valides:

testtest
testabc
5
cashmere

Utilisez le motif regex ^(?=.{8})(?=.*[^a-zA-Z])


Explication:

^(?=.{8})(?=.*[^a-zA-Z])
│└──┬───┘└──────┬──────┘
│   │           │
│   │           └ string contains some non-letter character
│   │
│   └ string contains at least 8 characters
│
└ begining of line/string

Si vous voulez aussi limiter la longueur maximale (disons 16) , utilisez le motif regex 

^(?=.{8,16}$)(?=.*[^a-zA-Z])
25
Ωmega

Exécutez-le avec une expression rationnelle assez simple: [^a-zA-Z]

Et puis vérifiez sa longueur séparément:

if(string.Length > 7)
2
J V

Une méthode simple ressemblera à ceci:

Match match1 = Regex.Match(<input_string>, @"(?=.{7})");   

match1.Success garantit qu'il y a au moins 8 caractères.

Match match2 = Regex.Match(<input_string>, [^a-zA-Z]);

match2.Success garantit qu'il y a au moins un caractère spécial ou un nombre dans la chaîne.

So, match1.Success && match2.Success guarantees will get what you want.
1
Johnny

J'ai essayé l'exemple d'Omega mais cela ne fonctionnait pas avec mon code C #. Je recommande d'utiliser ceci à la place:

[RegularExpression(@"^(?=[^\d_].*?\d)\w(\w|[!@#$%]){7,20}", ErrorMessage = @"Error. Password must have one capital, one special character and one numerical character. It can not start with a special character or a digit.")]
0
cyclical