Jump to content
  • 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

Recommended Posts

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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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 :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.