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
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])
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)
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.
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.")]