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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

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.