Expressão regular para validar senha [Resolvido]

9 respostas
Pumpkin

Olá a todos…

Estou tentando fazer uma expressão regular para validar uma senha onde, deve ter 2 letras e 1 número.

Consegui fazer, mas aceita apenas “aa1a1a”, “abc123c4d”. Quando tento fazer “1a2b3c4d” não funciona.

O meu código é o meu a seguir:

^((\d+\D{2,})|(\D{2,}\d+)|(\D+\d+\D+))+$

Obrigado desde já.

9 Respostas

E

A senha deve ter pelo menos 2 letras e 1 dígito, é isso?

Você sabe que as seguintes senhas devem bater:

aa1
a1a
1aa

Ou seja, algo como (vou simplificar um pouco, para você não ficar embaralhado com um monte de símbolos e usar “a” no lugar de “[^0-9]” e “9” no lugar de “[0-9]”:

“.?(a+a+9+|a+9+a+|9+a+a+).?”

Pumpkin

Só que infelizmente não seria o meu caso, pois no caso de a senha ser “1a2b123a” não valida mesmo existindo mais de 2 letras e 1 número.

E

Deixa eu ver. Expressões regulares são meio chatinhas para fazer contagens; normalmente você evita usá-las para tudo.

Pumpkin

Sei que é chatinhas porem é manutenção em código, tenho que alterar para funcionar.

Valeu.

E

Rode o programa abaixo. A expressão regular que indiquei deve estar correta.

import java.util.regex.*;
import java.util.*;

class TesteRegex8 {
    public static void main(String[] args) {
        String[] testes = {
            "",
            "a",
            "9",
            "aa",
            "99a",
            "an9",
            "a9n",
            "9an",
            "jose aparecido tem 9 filhos e 16 esposas",
            "19828883a8829",
            "19828883a8829b",
            "1a2b123a",
            "aa1a1a", 
            "abc123c4d",
        };
        String regex = ".*?(\D+\D+\d+|\D+\d+\D+|\d+\D+\D+).*?";
        Pattern pat = Pattern.compile (regex);
        for (String expr : testes) {
            Matcher mat = pat.matcher (expr);
            System.out.printf ("%s -> %s%n", expr, mat.matches());
        }
    }
}
R

Amigo, vc pode verificar a ocorrencia de numeros assim, aqui ele verifica a existencia de pelo menos 1 digito.

String suastring = "aqui sera o teste, coloque seu texto aqui";
 String comp = "[telefone removido]";
 String compb = "abcdefghijklmnopqrstuvxzwy";
 int cont = 0, contb=0;
 for(int i = 0; i< suastring.length() ; i++){
    for(int j = 0; j < comp.length() ; j++){
       if(suastring.charAt(i) == comp.charAt(j))
          cont ++;
    }
 }

 for(int i = 0; i< suastring.length() ; i++){
    for(int j = 0; j < compb.length() ; j++){
       if(suastring.charAt(i) == compb.charAt(j))
          cont ++;
    }
  }

 if(cont !=0 && contb > 1)
   //string valida
 else
   //string nao valida

Aquele abraco

B

Expressões regulares não servem para isso. Faça a contagem na mão mesmo.

Pumpkin

Bom dia,

Efetuei alguns testes na minha aplicação e principio funcionou, vou realizar mais alguns verificações, estudar para compreender o que teste está sendo realizado e depois dou um feedback da solução.

Obrigado…

Pumpkin

entanglement, cara funcionou aqui com esse expressão, realizei alguns teste e deu tudo ok…

Infelizmente não posso alterar o código, pois essa expressão está sendo utilizada em diversos pontos do sistema, e alterar tudo ficaria inviável. :?

Obrigado pela ajuda e pela sugestão :smiley:

Criado 20 de janeiro de 2010
Ultima resposta 22 de jan. de 2010
Respostas 9
Participantes 4