2009-09-25 9 views
1

J'essaye de localiser une application existante qui a la logique suivante qui essaye de valider une zone de texte de mot de passe. Je suppose que cela ne fonctionnera pas avec les langues avec des caractères spéciaux que l'utilisateur pourrait taper dans la zone de texte. Ai-je raison? Je ne pense pas que nous voulions empêcher l'utilisateur de taper des caractères de type non anglais (arabe, chinois, etc.). Ou est-ce qu'il y a quelque chose que je ne comprends pas?Comment localiser la validation de mot de passe en C#?

Regex ValidHex = 
    new Regex("[A-Za-z1234567890_-]+", RegexOptions.IgnoreCase); 
if (!ValidHex.IsMatch(e.Text)) 
{ 
    e.Handled = true; 
} 

Répondre

8

Vous pouvez faire comme ceci pour soutenir les caractères unicode:

[\p{L}\p{N}_-]+ 

Comme une note de côté: est-il une raison spécifique, vous devez limiter les caractères sont autorisés?

+1

Exactement, si l'utilisateur veut ajouter des codes étranges pour la sécurité, pourquoi empêcher cela? –

+0

D'accord; Il n'y a jamais une bonne raison de limiter (ou même d'exiger) certaines combinaisons de caractères dans les mots de passe, pour vos utilisateurs. –

6

Ne stockez pas les mots de passe! Hash le mot de passe en utilisant un cryptographic hashing function et comparez cela.

+1

Même si je déteste ce type de réponse, Ben a raison. – JoeB

+9

@Ben S: où dans la question est le stockage de mot de passe mentionné? –

+1

Bon conseil en général, mais aussi complètement orthogonal à la question posée. Il n'a pas dit qu'il stockait des mots de passe, et son extrait de code n'implique pas qu'il le soit. –

0

Avez-vous essayé d'utiliser \ w au lieu de A-za-z? Je parie que cela permettra de contourner les problèmes de localisation.

1

Cette expression régulière n'est pas particulièrement bonne, elle limite les options des utilisateurs et n'applique rien (les mots de passe 'a' et 'aaaaaaa' passeraient). Le nom suggère qu'il a été adopté à partir d'une expression qui a validé les nombres hexadécimaux. Vous devez au moins ajouter une condition de longueur minimale (dans reg ex ou e.Text.Length> 8).

Une expression plus sensible validerait qu'au moins 1 char de plusieurs groupes a été utilisé, j'ai découvert ceci: @"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\W)"See here. Encore une fois, ajoutez une vérification de longueur minimale.

Cet exemple ne résout pas le problème de localisation. Il autorise uniquement les caractères non-latins à l'aide du '.' et ne les considère pas satisfaire aux exigences [a-z] ou [A-Z].

Questions connexes