Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

DiJrId0u

metodo para validar um endereço de email

Mensagens Recomendadas

DiJrId0u

Caros amigos,

Estou com algumas duvidas em construir um metodo booleano que me verifique se um determinado endereço de mail(String) segue os padrões normais definidos.

tenho um metodo de teste que testa os seguintes endereços:

assertTrue(ContactSingle.checkEmail("dd.eee@g.com"));
     assertTrue(ContactSingle.checkEmail("a.b.34.dd.eee@f.g.com"));
     assertTrue(ContactSingle.checkEmail("a@b.3om"));
     assertFalse(ContactSingle.checkEmail("a@com"));
     assertFalse(ContactSingle.checkEmail(".a@b.com"));
     assertFalse(ContactSingle.checkEmail("a.@b.com"));
     assertFalse(ContactSingle.checkEmail("a@.b.com"));
     assertFalse(ContactSingle.checkEmail("a@b.com."));
     assertFalse(ContactSingle.checkEmail("as#@b.com"));
     assertFalse(ContactSingle.checkEmail("a@b%.com"));

Depois, defini na classe ContactSingle o seguinte método:

public static boolean checkEmail(String email)
  {
     Pattern modeloEmail = Pattern.compile
     ("([a-zA-Z0-9%]+([.-_][a-zA-Z0-9%])*)" + "@" +
      "([a-zA-Z0-9%]+([.-_])+[a-zA-Z0-9%])*");

     Matcher m = modeloEmail.matcher(email);

     boolean b = m.matches();

     if (b)
     {
        return true;         
     }

     return false;
  }

O problema, é que não consigo passar os testes e creio que o meu problema esteja na definição da variável modeloEmail.

Alguém pode dar uma dica?

Cumprimentos,

Henrique Guerreiro

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

Penso que precisas de colocar duas barras \\ antes de caracteres como o . para ele ser reconhecido como ponto, senão é capaz de estar a fazer match com qualquer caracter (excepto o '\n'). Vê aqui o exemplo de validação de email para veres como tens de fazer.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
DiJrId0u

Obrigado.

Já notei que o problema é mesmo na construção da expressão.

Preciso de uma expressão logica que suporte todos os testes e não estou a conseguir construi-la.

consigo passar nos exemplos nome@mail.com, nome.nome@mail.com, mas se for algo do dipo nome.n.n.nome@mail-int.com, já nao consigo!

vou continuar a partir a cabeça...

Cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
DiJrId0u

consegui com a seguinte expressão:

"[a-z]+([._-]{1}[a-z0-9]+)*?@([a-z0-9]+[.-_]{1})*?(([a-z0-9]+)\\.[a-z0-9]+){1}"

de facto, estava-me a faltar as barras antes do .(ponto), e mais umas cabeçadas na parede.

Dividi o endereço em blocos obrigatórios e opcionais em que, no endereço nome@domain.com, o "nome" é o 1º bloco e o "domain.com" o 2º bloco. num endereço nome_op.op@op-domain.com, tudo o que nao pertence ao 1º e 2º bloco, é opcional... "_op.op" e "op-" é opcional.

Obrigado na mesma :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.