segunda-feira, 17 de fevereiro de 2014

Validando Email em Java Com e Sem expressão Regular



Fala galera! Após um período sumido, volto aqui com uma postagem interessante para vocês. Vamos aprender a validar em nosso sistema um campo de email. Uma das formas é de forma normal, e a outra, com expressão regular. Vamos lá!

Validação de um campo de email, segundo algumas regras definidas que podem ser personalizadas além das definidas nesse código.

Basicamente um email deve possuir as seguintes opções em seu campo.

1- Não possuir espaços.
2- Possuir o @.
3- Possuir algum caracter após o @.
4- Possuir pelo menos um ponto após o @.

Exemplos de email válido:

andre@java.com, andre@java.com.br, andre@java.net

Como já é de conhecimento de todos o email possui duas partes separadas pelo @, nesse caso iremos chamar a primeira de usuário e a segunda de domínio.

Com base nas opções e nas definições acima podemos determinar quais são as opções que devem ser testadas.

O tamanho do texto dentro de Usuário tem que ser maior ou igual a 1( esse valor pode ser alterado), e não pode possuir o @.

O domínio tem que possuir ponto, não pode possuir @ e a posição do primeiro ponto tem que ser maior do que a primeira posição(a primeira posição deve ser uma letra), o ultimo ponto não pode aparecer na ultima posição.

Neste caso apenas iremos trabalhar com o evento focusLost, porque esse é o evento quando o usuário acabar de preencher o email e tentar sair para o próximo campo do formulário.

Quando o email for inválido o sistema irá mostrar uma mensagem para o usuário em um JLabel.
Como já vimos os eventos e quais opções devem ser testadas, precisamos começar a desenvolver o formulário.

Vamos começar: Primeiro precisamos desenhar a interface abaixo:
Onde existe a palavra email, um campo de texto chamado jTextFieldEmail e um jlabel chamado jlabelEmail.
Após desenhar a interface precisamos clicar com o botão direito do mouse sobre o JtextFieldEmail e selecionar a opção eventos Focus e depois focusLost.
Vai abrir no código fonte o método criado, basta colocar esse código:

   if ((jTextFieldemail.getText().contains("@")) && 
(jTextFieldemail.getText().contains(".")) && 
(!jTextFieldemail.getText().contains(" "))) {

String usuario = new String(jTextFieldemail.getText().substring(0, 
jTextFieldemail.getText().lastIndexOf('@')));

            String dominio = new String(jTextFieldemail.getText().substring(jTextFieldemail.getText().lastIndexOf
('@') + 1, jTextFieldemail.getText().length()));

            if ((usuario.length() >=1) && (!usuario.contains("@")) && 
(dominio.contains(".")) && (!dominio.contains("@")) && (dominio.indexOf(".") >= 
1) && (dominio.lastIndexOf(".") < dominio.length() - 1)) {

            jLabelEmail.setText("");

            } else {

                jLabelEmail.setText("E-mail Inválido");

                jTextFieldemail.requestFocus();

            }

        } else {

            jLabelEmail.setText("E-mail Inválido");

            jTextFieldemail.requestFocus();

        }

No primeiro IF fizemos 3 testes, o primeiro verifica se no email já existe o @, o segundo verifica se no email existe o ponto, e o terceiro verifica se no email não existe o espaço.

Se o email informado passar pelos 3 testes acima ele é dividido em duas partes, antes do @ que é chamado de usuário e depois do @ que que chamamos de domínio.

Com essa divisão do email, são realizados os últimos testes, onde:

Usuário: não pode conter @.

Usuário: tamanho da string tem que ser maior ou igual a 1.

Domínio: não pode conter @.

Domínio: tem que conter ponto.

Domínio: a posição do primeiro ponto tem que ser maior ou igual a 1.

Domínio: e o ultimo ponto não pode ser o ultimo caracter.

Caso passe por todos os teste a mensagem que aparece no JLabelEmail é apagada.

Se não passar em algum dos colocamos a mensagem "E-mail Inválido" no jLabelEmail, e devolvemos o focus para o campo do JTextFieldEmail, dessa forma só saindo do campo de email, quando for digitado um email válido.

Esta operação busca garantir que apenas quando um usuário digitar um email válido ele poderá seguir preenchendo os demais campos do formulário, caso contrário ficara aparecendo a mensagem.

Agora vamos à mesma solução, mas desta vez com Expressão Regular:



  1. private void validarEmail(String email) throws PlcException {  
  2.   
  3.      
  4.           Pattern p = Pattern.compile("^[\\w-]+(\\.[\\w-]+)*@([\\w-]+\\.)+[a-zA-Z]{2,3}$");    
  5.           Matcher m = p.matcher(email.trim());   
  6.           if (!m.find())  
  7.               System.out.println("### EMAIL INVÁLIDO");  
  8.   
  9.       } 

10992879873987987 de vezes mais simples!

Então é isso galera! Espero que tenham gostado e até a próxima!

Nenhum comentário:

Postar um comentário

Admin: Bruno

Olá Galera! muito grato por estarem acessando nosso blog. Espero que seja possível transmitir de forma compreensível um pouco de meus conhecimentos em programação, para esta comunidade de desenvolvedores que cresce cada vez mais! Espero que Gostem! Abraço! E meu enorme obrigado à Renato Simões, Átila Soares,Wanderson Quinto, Emerson e a toda galera que sempre ajudou meu sincero obrigado....
Especialmente a Natalia Failache e Rita de Cassia que sempre apoiaram este sonho....

De seu amigo Bruno Rafael.