Pergunta

Eu estou tentando localizar um aplicativo existente que tem a seguinte lógica que tenta validar uma caixa de texto senha. Estou assumindo que isso não vai funcionar com idiomas com caracteres especiais que o usuário pode digitar na caixa de texto. Estou correcto? Eu não acho que queremos restringir o usuário de digitar caracteres de tipo não Inglês (ou seja, árabe, chinês, etc.). Ou, há algo que eu não estou entendendo?

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

Solução

Você pode fazer como este para caracteres Unicode de apoio:

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

Como uma nota lateral: há alguma razão específica que você precisa para limitar o que os caracteres são permitidos

Outras dicas

Não armazene senhas!

Hash a senha usando um criptográfico função hash e comparar isso.

Essa expressão regular não é particularmente bom, que restringe as opções de usuários e não impõe nada (a senhas 'a' e 'aaaaaaa' passaria). O nome sugere que ele foi adotado a partir de uma expressão que validou números hexadecimais. Você teria pelo menos para adicionar uma condição mínima Comprimento (na reg ex ou como e.Text.Length> 8).

Uma expressão mais sensato validar que, pelo menos, uma forma de char vários grupos foi utilizado, Desenterrei este: @"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*\W)" Veja aqui . Mais uma vez, adicione uma verificação de comprimento mínimo.

Este exemplo não aborda o problema da localização, Ele permite caracteres não-latinos apenas através do ''. e não os considera satisfazendo a [a-z] ou [A-Z] requisitos.

Você tentou usando \ w em vez de A-za-z? Eu estou apostando que vai ficar em torno de questões de localização.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top