Expresao regular [RESOLVIDO]

8 respostas
CristianPalmaSola10

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 ?

8 Respostas

E

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?

CristianPalmaSola10

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

Rodrigo_Sasaki

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

CristianPalmaSola10

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 ?

Rodrigo_Sasaki

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

CristianPalmaSola10

Valeu pela ajuda Rodrigo…

E

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.

Rodrigo_Sasaki

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:

Criado 3 de abril de 2013
Ultima resposta 3 de abr. de 2013
Respostas 8
Participantes 3