Segunda-feira, 31 de maio de 2004 às 01h59

Validação de formulário

Faltam 0 dias! Inscreva-se agora! O maior encontro de profissionais web da américa latina.

What’s up dude? What’s going on?

A validação de formulários é um dos usos mais comuns na programação Javascript. A validação de dados por meio da programação Javascript é muito fácil e rápida por que a verificação é feita no browser, sem necessitar ir até o servidor para transmitir dados.

A validação é feita para não haver inconsistência de dados quando forem enviados para a base de dados. Uma checagem no servidor seria necessário no caso do Javascript estar desligado ou se, de alguma maneira, alguém tentar driblar a validação de forma maliciosa ou por engano. Para a maioria das pessoas a validação Javascript consegue economizar muito tempo.

Para podermos trabalhar com a validação de formulário, foi criado um formulário padrão para podermos testar. A figura abaixo será o nosso exemplo:

Com uma noção de onde pretendemos chegar vamos construir o nosso formulário baseado na imagem acima:

Exemplo:

<form name="cadastro" action="teste.php" method="post" onSubmit="return validaForm()">
          <table width="40%" border="1" cellpadding="5" cellspacing="0" bordercolor="#000000">
                    <tr>
                              <td>nome:</td>
                              <td><input name="nome" type="text"></td>
                    </tr>
                    <tr>
                              <td>user:</td>
                              <td><input name="user" type="text"></td>
                    </tr>
                    <tr>
                              <td>senha:</td>
                              <td><input name="senha" type="password"></td>
                    </tr>
                    <tr>
                              <td>email:</td>
                              <td><input name="email" type="text"> (xxx@xx.xx)</td>
                    </tr>
                    <tr>
                              <td>telefone:</td>
                              <td><input name="telefone" type="text"></td>
                    </tr>
                    <tr>
                              <td>Data de nascimento:</td>
                              <td><input name="nasce" type="text"> (dd/mm/yyyy)</td>
                    </tr>
                    <tr>
                              <td>Sexo :</td>
                              <td>
                                        <input name="sexo[]" type="radio" value="masculino" id="sexo">
Masculino
                                        <input name="sexo[]" type="radio" value="feminino" id="sexo">
Feminino
                              </td>
                    </tr>
                    <tr>
                              <td colspan="2">
                                        <div align="right">
                                        <input name="enviar" type="submit" value="enviar">
                                        </div>
                              </td>
                    </tr>
          </table>
</form>

O codigo HTML é uma estrutura de tabela com um formulário, tudo bem simples. Basta apenas prestar atenção para os nomes das caixas de entradas e dos botões radio bos para não ter problemas na hora da programação.

No formulário acima, o evento onSubmit chama uma função chamada validaForm que será responsável pela validação dos dados do formulário. Se os dados estiverem corretos retornará true e o formulário será enviado. Caso contrário uma mensagem será mostrada determinando o local do erro.

Com o formulário criado agora vamos partir para o desenvolvimento do código. Neste formulário será feita a checagem de seis caixas de entrada de dados e de um radio box.
Para validação das as caixas de entradas é feita uma verifição se foi digitado algum valor.
Para o campo e-mail a verificação é mais elaborada para saber se é um endereço de email válido.

Para o campo telefone, só são aceito números.
Para o campo Data de nascimento é verificado se a data esta correta com o padrão estabelecido.
Para o campo Sexo é verificao se algum valor foi selecionado.

Exemplo (Ao final desta matéria temos o link para visualização do resultado final):

1 function validaForm(){
2           d = document.cadastro;
3           //validar nome
4           if (d.nome.value == ""){
5                     alert("O campo " + d.nome.name + " deve ser preenchido!");
6                     d.nome.focus();
7                     return false;
8           }
9           //validar user
10         if (d.user.value == ""){
11                   alert("O campo " + d.user.name + " deve ser preenchido!");
12                   d.user.focus();
13                   return false;
14         }
15         //validar senha
16         if (d.senha.value == ""){
17                   alert("O campo " + d.senha.name + " deve ser preenchido!");
18                   d.senha.focus();
19                   return false;
20         }
21         //validar email
22         if (d.email.value == ""){
23                   alert("O campo " + d.email.name + " deve ser preenchido!");
24                   d.email.focus();
25                   return false;
26         }
27         //validar email(verificao de endereco eletrônico)
28         parte1 = d.email.value.indexOf("@");
29         parte2 = d.email.value.indexOf(".");
30         parte3 = d.email.value.length;
31         if (!(parte1 >= 3 && parte2 >= 6 && parte3 >= 9)) {
32                   alert ("O campo " + d.email.name + " deve ser conter um endereco eletronico!");
33                   d.email.focus();
34                   return false;
35         }
36         //validar telefone
37         if (d.telefone.value == ""){
38                   alert ("O campo " + d.telefone.name + " deve ser preenchido!");
39                   d.telefone.focus();
40                   return false;
41         }
42         //validar telefone(verificacao se contem apenas numeros)
43         if (isNaN(d.telefone.value)){
44                   alert ("O campo " + d.telefone.name + " deve conter apenas numeros!");
45                   d.telefone.focus();
46                   return false;
47         }
48         //validar data de nascimento
49         erro=0;
50         hoje = new Date();
51         anoAtual = hoje.getFullYear();
52         barras = d.nasce.value.split("/");
53         if (barras.length == 3){
54                   dia = barras[0];
55                   mes = barras[1];
56                   ano = barras[2];
57                   resultado = (!isNaN(dia) && (dia > 0) && (dia < 32)) && (!isNaN(mes) && (mes > 0) && (mes < 13)) && (!isNaN(ano) && (ano.length == 4) && (ano <= anoAtual && ano >= 1900));
58                   if (!resultado) {
59                             alert("Formato de data invalido!");
60                             d.nasce.focus();
61                             return false;
62                   }
63         } else {
64                   alert("Formato de data invalido!");
65                   d.nasce.focus();
66                   return false;
67         }
68         //validar sexo
69         if (!d.sexo[0].checked && !d.sexo[1].checked) {
70                   alert("Escolha o sexo!")
71                   return false;
72         }
73         return true;
74 }

Linha 1 – Declaração da função responsável pela validação dos dados do formulário.

Linha 2 – Declaração de uma variável para economizar tempo e prováveis erros de digitação.

Linha 4 – Verificação se foi digitado algum valor para o campo nome. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção.

Linha 10 – Verificação se foi digitado algum valor para o campo user. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção.

Linha 16 – Verificação se foi digitado algum valor para o campo senha. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção.

Linha 22 – Verificação se foi digitado algum valor para o campo email. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção.

Linha 28 – Declaração de uma variável que armazenara a posição do caractere “@” na caixa de entrada email.

Linha 29 – Declaração de uma variável que armazenara a posição do caractere “.” na caixa de entrada email.

Linha 30 – Declaração de uma variável que armazenara a quantidade de caracteres digitados na caixa de entrada email.

Linha 31 – Estrutura condicional para verificação se o caractere “@” está no mínimo depois de três letras, o caractere “.” está no mínimo depois de seis e se foi digitado no mínimo 9 letras. Se retornar falso, é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção.

Linha 37 - Verificação se foi digitado algum valor para o campo telefone. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção.

Linha 43 - Verificação se o valor digitado no campo telefone possui apenas números. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção.

Linha 50 – Declaração de uma variável que armazena uma nova Data.

Linha 51 - Declaração de uma variável que armazena o valor do ano no formato completo com 4 caracteres.

Linha 52 – Declaração de uma variável que separa o valor da caixa de entrada referente a data de nascimento e coloca em uma matriz, a “/” é utilizada para separar os valores entre elas, é suposto ter 3 valores referente a dia, mês e ano respectivamente.

Linha 53 - Estrutura condicional para verificação se tem 3 valores para a matriz criada. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção.

Linha 54 - Declaração de uma variável que recebe o primeiro valor da matriz, valor esse referente ao dia.

Linha 55 - Declaração de uma variável que recebe o segundo valor da matriz, valor esse referente ao mês.

Linha 56 - Declaração de uma variável que recebe o terceiro valor da matriz, valor esse referente ao ano completo com 4 caracteres.

Linha 57 - Declaração de uma variável que faz a verificação das variáveis criadas anteriormente referente a dia, mês e ano, é feita uma checagem se os valores são números e se estão no padrão estabelecido.

Linha 58 - Estrutura condicional para checagem se o resultado da verificação dos dados digitados. Se retornar falso é é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção.

Linha 69 - Verificação se foi selecionado algum valor referente ao sexo. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção.

Linha 73 – Se todos os valores foram digitados corretamente a função vai retornar true e o formulário será enviado.

Sempre lembrando que essa validação é boa, mas pode ser feito muito mais coisas para aprimorar, até mesmo trabalhar com programação orientada a objeto com o intuito de criar métodos que façam a análise dos dados.

Clique aqui para ver o html com o resultado final!

Valeu galera até a próxima semana!

31 comentários

 Raphael Medeiros
01/06/2004 21h39

Validação!

Muitas validações podem ser feitas utilizando Expressões Regulares.. será que existe alguma vantagem em se utilizar E.R ou não!?!?

 Béko
13/07/2004 03h12

Desconheço o código PhP

Infelizmente, não tive oportunidades de estudar muito Php e tenho conhecimentos básios em Java Script, gostaria de saber se você poderia me auxiliar com o código em Php desse teste?
Mande por e-mail se possível, Valeu!

 Marcus Vinícius Mont Alvao Mon
11/08/2004 13h45

Simples e de pura necessidade

Bom pelo menos pra mim foi muito útil aki pois não lembrava mais como fazia validações no form via Javascript.

Fui

 Felipe Queiroz Drumond
31/08/2004 00h48

Erro na validação do e-mail

eu descobri um bug no seu sistema, quando se digita um e-mail como o meu que tem ( . ) antes do @ ele diz que o e-mail não é válido!!!
poderia nos dizer porque?

 Rogério Perez
05/09/2004 01h52

Dúvida Urgente com Matrizes

tenho uma dúvida.

Estou fazendo um sistema de validação, porém o nome dos campos são:

vlr[1]
vlr[2]
etc..

qdo vou fazer a validação recebo um erro de js.

O que devo fazer?

 Filipe
18/02/2005 10h32

O bug realmente existe

Mas é pata o "."
usei "-" e passou.
Usei "_"e tb passou.
Mas o "."nao passa. Isso anula a rotina.
Alguma solução?

 Tiago Luis
23/03/2005 16h49

teste,pho

Olá Tiago... o formulário deu certo sim, mas vc poderia me passar o conteúdo do arquivo "teste,php"? Meu e-mail: thifacco@yahoo.com.br .
Obrigado

 Osmar Nilo de Jesus Lima Bezer
06/06/2005 02h02

A validacao de email nao funciona direito

A validacao de emails nao esta funcionando para emails com ponto. Por exemplo nilo.lima@ac.gov.br

 Robson Adriano P. Suárez
07/07/2005 09h57

os pontos não esta validando :-(

E mesmo!
A validacao de emails não esta funcionando para emails com ponto. Por exemplo ro.adri@idataplus.com
eu testei no formulário que esta de exemplo no site....

 Lia
14/07/2005 11h30

Dúvida

além do aspecto do e-mail, tem uma coisa, e se eu colocar um número no meu nome? EX: Die2go

Gostaria de saber como bloqueia isso:
diego_ocara@hotmail.com

 oziel
01/08/2005 00h57

problema no código

a validação de e-mail não funciona, que pena, o script é bom...

 Rodrigo
25/08/2005 07h57

Validação por tags personalizadas


&lt;SCRIPT LANGUAGE=javascript&gt;
&lt;!--
//--------------------------------------------
function CheckCampos()
{
var campo = document.forms[0];
var i=0;
for (i=0 ;i &lt; campo.elements.length ; i++ ){
var __valida = campo.elements[i].getAttribute("valida");
var __valida_msg = campo.elements[i].getAttribute("valida_msg");
__valida = ((__valida == null) ? "" : __valida )
__valida_msg = ((__valida_msg == null) ? "Obrigatório" : __valida_msg )
var __value = campo.elements[i].getAttribute("value");
var __name = campo.elements[i].name;
var s = new String()
if (__valida.toLowerCase() == "true" )
if (__value == "" ){
alert( __valida_msg);
campo.elements[i].focus();
return false;
}

}
return true;
}
//--------------------------------------------
function EnviaForm(){
if ( !CheckCampos() )
return false;
else
alert("Form Enviado");
}
//--------------------------------------------
--&gt;
&lt;/SCRIPT&gt;

&lt;HTML&gt;
&lt;BODY&gt;
&lt;form name=fr method=post&gt;
&lt;input type="text" name="txtValor" valida="true" valida_msg="Campo Obrigatório" /&gt;
&lt;input type="button" name="bt" onclick="EnviaForm()" value="Enviar" /&gt;
&lt;/form&gt;
&lt;/BODY&gt;
&lt;/HTML&gt;

 Adriano Novaes
13/10/2005 10h37

javascript so numero

function bloqueia_alfa(){
if (event.keyCode &lt; 47 || event.keyCode &gt;57){
event.keyCode = 0;
return false;
}
else{
if (event.keyCode == 47){
event.keyCode = 0;
return false;
}
}
}

&lt;input type="text" name="textfield" onFocus="retiraBarras(this)" onBlur="formataData(this)" onKeyPress="return bloqueia_alfa()"&gt;

 Tiago Luis
09/02/2006 14h16

Interromper o envio do form

Bem, quando a função de validação é executada, e encontra algum campo invalido, ela deve mostrar uma mensagem de erro, e dirigir o foco para o campo mal preenchido! Certo?
No meu caso, isto acontece, mas o envio não é interrompido! Sendo assim, apesar de mostrar o erro, a validação não funciona!
Coloquei o return false para todas as possibilidades de erro! e mesmo assim, o formulário é enviado para o servidor!

 Renato
05/04/2006 21h48

Dúvida

Como fica a validação do "checkbox"

 Luis Gonzalo
04/05/2006 11h18

Firefox

A validação do ponto antes da @ é um bug no Firefox, no IE funciona.

 Luis Gonzalo
04/05/2006 11h21

Correção

A validação do ponto antes da @ é um bug sim, para os dois navegadores.

 Daniel Henrique Santos Oliveira
22/05/2006 14h51

Muito Excelente

Essa materia é muito boa.
Facil e objetiva.
Parabens.

 Leandro Follmann
02/07/2006 00h20

Disponibilizar

Adorei o script, ficaria legal se disponibilizase o teste.php, para poder colocar o e-mail de destino, é possível?

 Isac Redua
06/09/2006 16h26

Validação de E-mail

Na linha 31, substituir por: if (!(pos1 >= 3 && (pos1 pos2) >= 6 && qtd3 >= 9))

Assim passará a aceitar e-mails como por exemplo, ana.paula@hotmail.com

 Isac Redua
06/09/2006 16h28

correção da postagem anterior

é ( pos1 pos2 )

 Danilo Oliveira
21/12/2006 09h18

Excelente!

O melhor artigo sobre validação de formulário que já encontrei na web.
Simples, prático e o que é melhor, é passo à passo detalhado.
Parabéns Thiago

 Fabian Parrudex
29/12/2006 09h41

show

a validação do email ficou show..
valeu!!!

 Leonardo Matos Lopes
11/02/2007 22h43

Excelente

Muito boa a matéria!
Me ajudou muito, eu não conheço nada de php nem JavaScript, e só foi preciso estudar os códigos mostrados pra fazer funcionar meu formulário direitinho!
Sucesso, meu caro!

 aldo jean soares silva
10/05/2007 10h43

Parabéns Thiago Prado!

Você tem boa didática e aborda o assunto de forma simples.

 Adilson Fragoso
01/03/2008 01h37

validação email

não consegui ainda fazer com que seja aceito, email com ponto antes de @. Tentei de acordo com o comentário número 20 e 21, mas não deu certo

 Luciano Sturaro
19/05/2008 04h18

Agradecimento

Me foi muito util esta função, funcionou perfeitamente até mesmo para e-mail com ponto antes do @.

Para ficar 100% pro meu caso só falta dar uma polida em algumas partes.

Se alguém quiser testar, temporiamente o teste pode ser feito aqui:

http://www.hamtec.com.br/old/finalizar.php

 Alexandre Iturres
03/02/2009 16h30

Validação de email

<html>
<head>
<title>Validando email</title>
<script language="JavaScript">
<!--
function validaEmail(entrada) {
var entrada = entrada.email
var arroba = entrada.value.indexOf('@')
var ponto = entrada.value.substring(arroba + 1, entrada.length)
for (var i = 0; i < ponto.length; i++) {
if (ponto.charAt(i) == ".") {
break
}
}
if (entrada.value.length <= 0) {
alert("Email inválido!")
return false
}
if (arroba <= 3) {
alert("Preencha o email corretamente!")
return false
}
if (ponto.charAt(i) != ".") {
alert("Email incorreto")
return false
}
return true

}
//-->
</script>
</head>
<body>
<form onsubmit="return validaEmail(this)">
<input type="text" name="email" />
<input type="submit" value="Ver" />
</form>
</body>
</html>

 Everton Rafael
03/04/2009 09h03

Está de parabéns

Olha eu estava procurando na net a validação, achei um monte de exmplo... Mas esse é o melhor, está funcionando perfeitamente....

Meus Parabéns Thiago!
Muito Obrigado!


Abraços

 Paulo Henrique
12/09/2009 22h32

Muito bom, obrigado!


O artigo ficou mto bom. Parabéns.

Tem sim alguns probleminhas mas esta tudo muito simples e claro e me ajudou mto.

Até

 Roberta Sanches
28/10/2009 11h57

dúvida

Adorei o script, ficaria legal se disponibilizase o teste.php, para poder colocar o e-mail de destino, é possível?
no seu aguardo.

Cancelar resposta

Qual a sua opinião?

Faça login abaixo ou cadastre-se rapidamente.


2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.