Expresao regular [RESOLVIDO]

galera eu quero validar a senha que o usuario informa da seguinte maneira, ela tem que ter letras , numeros e caracteres especias fiz a seguinte expresao regular


"[a-zA-Z]+[0-9]+[\\p{Punct}]+"

mas ela so ira validar se os caracteres estiverem nessa sequencia

entaum como eu faria para validar os caracteres em qualquer sequencia ?

tentei o seguitne


("[a-zA-Z0-9\\p{Punct}]+

mas neste casso valores sem caracteres especiais foram validados, alguem sabe aonde eu errei ?

Caso típico de especificação incompleta.

Você quer uma senha que tenha pelo menos 1 caracter especial, 1 letra e 1 dígito? É isso?

o tamanho minimo é 6 mais isso posso validar usando o length

mas a senha tem que ter letras numeros e caracteres especiais, no minimo 1 de cada mas o tamanho minimo da senha é 6

cristian12# == valido
cristian14= não valido
crisitria1@#=valido

Tente assim:Pattern p = Pattern.compile("(?=.*[a-zA-Z]).*(?=.*\\d).*(?=.*\\p{Punct}).*");EDIT: Corrigi o padrão

funcionou rodrigo so mais uma duvida se eu quiser limitar so por curiosidade a quantidade de letras nesta expressao

eu fiz

"(?=.*[a-zA-Z]){1,2}.*(?=.*\\d).*(?=.*\\p{Punct}).*"

no minimo uma letra e no maximo duas mas não funcionou, palavras com mais letras sao validadas saberia porque ?

O operador que eu usei não funciona da maneira que você está acostumado.

Ele valida se existe o padrão pedido, porém não consome nenhum caractere na leitura, ele não avança o índice. por isso eu coloco os quantificadores atrás e na frente do padrão, para verificar se ele existe em qualquer lugar do texto.

Você não vai conseguir fazer o que quer somente utilizando isso. validar usando o length como você disse é uma solução muito mais simples

Valeu pela ajuda Rodrigo…

De modo geral, se seu problema exige, para ser resolvido, desse operador “(?=” ou “(?<” ou coisa parecida (back-reference), é sinal que ele pode ser resolvido, de forma mais clara, combinando-se várias expressões regulares, em vez de tentar resolver com uma única expressão regular.

Eu concordo, eu sempre acho que esse tipo de coisa fica bem confusa. Aquele código que outras pessoas na equipe pensam:

“Eu não sei o que isso faz, mas não vou ser eu que vou mexer aí.”

As vezes uma solução que parece mais “demorada” pode ser melhor pela simplicidade.

Mas como não resisto a uma brincadeirinha com expressões regulares, resolvi montar o padrão :slight_smile: