[RESOLVIDO] Como validar data com java script?

11 respostas
L

Olá galera, estou precisando validar os campos de um formulário, já validei quase todos os campos usando java script, já conseguir validar o formato da data, ou seja, o sistema só vai aceitar datas no formado DD/MM/AAAA, agora tenho um problema:
preciso validar essa data, levado em conta anos bissextos, quantidade de dias em cada mês. Exemplo

usuário digita: 29/02/2013
o sistema deve pedir que o usuário digite a data novamente, pois 2013 não é um ano bissexto

usuario digita: 29/02/2013
data válida, pois 2012 é um ano bissexto

usuario digita: 20/14/2011
data inválida, pois não existe mês 14.

E assim sucessivamente. No momento a parte de validar data do meu codigo java script está assim:

//Aqui estou verificando se o campo data foi prrenchido
if (dataentrada == ""){
	alert ('Preencha o campo com a data de entrada');    
	form_registra_entrada.dataentrada.focus();
	return false;
}
// Verificar se o formato da data digitada está correto		
var patternData = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
if(!patternData.test(dataentrada)){
    alert("Digite a data no formato Dia/Mês/Ano");
	form_registra_entrada.dataentrada.focus();
    return false;
}
//A partir daqui quero verificar se a data é válida

Se puderem ajudar agradeço.

11 Respostas

E

leandro318:
Olá galera, estou precisando validar os campos de um formulário, já validei quase todos os campos usando java script, já conseguir validar o formato da data, ou seja, o sistema só vai aceitar datas no formado DD/MM/AAAA, agora tenho um problema:
preciso validar essa data, levado em conta anos bissextos, quantidade de dias em cada mês. Exemplo

usuário digita: 29/02/2013
o sistema deve pedir que o usuário digite a data novamente, pois 2013 não é um ano bissexto

usuario digita: 29/02/2013
data válida, pois 2012 é um ano bissexto

usuario digita: 20/14/2011
data inválida, pois não existe mês 14.

E assim sucessivamente. No momento a parte de validar data do meu codigo java script está assim:

//Aqui estou verificando se o campo data foi prrenchido
if (dataentrada == ""){
	alert ('Preencha o campo com a data de entrada');    
	form_registra_entrada.dataentrada.focus();
	return false;
}
// Verificar se o formato da data digitada está correto		
var patternData = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
if(!patternData.test(dataentrada)){
    alert("Digite a data no formato Dia/Mês/Ano");
	form_registra_entrada.dataentrada.focus();
    return false;
}
//A partir daqui quero verificar se a data é válida

Se puderem ajudar agradeço.


na verdade você pode fazer isso com html5, ele já valida pra você automaticamente. Basta usar o required nos seus campos. Exemplo:

<form action="demo_form.py">
  Data: <input type="date" name="data_entrada" required>
  Username: <input type="text" name="usrname" required>

  <input type="submit">
</form>

suporte dos navegadores: http://caniuse.com/#feat=form-validation
referência: http://docs.webplatform.org/wiki/html/attributes/required

L
Erick Ribeiro:
leandro318:
Olá galera, estou precisando validar os campos de um formulário, já validei quase todos os campos usando java script, já conseguir validar o formato da data, ou seja, o sistema só vai aceitar datas no formado DD/MM/AAAA, agora tenho um problema: preciso validar essa data, levado em conta anos bissextos, quantidade de dias em cada mês. Exemplo

usuário digita: 29/02/2013
o sistema deve pedir que o usuário digite a data novamente, pois 2013 não é um ano bissexto

usuario digita: 29/02/2013
data válida, pois 2012 é um ano bissexto

usuario digita: 20/14/2011
data inválida, pois não existe mês 14.

E assim sucessivamente. No momento a parte de validar data do meu codigo java script está assim:
//Aqui estou verificando se o campo data foi prrenchido
if (dataentrada == ""){
	alert ('Preencha o campo com a data de entrada');    
	form_registra_entrada.dataentrada.focus();
	return false;
}
// Verificar se o formato da data digitada está correto		
var patternData = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
if(!patternData.test(dataentrada)){
    alert("Digite a data no formato Dia/Mês/Ano");
	form_registra_entrada.dataentrada.focus();
    return false;
}
//A partir daqui quero verificar se a data é válida

Se puderem ajudar agradeço.


na verdade você pode fazer isso com html5, ele já valida pra você automaticamente. Basta usar o required nos seus campos. Exemplo:

<form action="demo_form.py">
  Username: <input type="text" name="usrname" required>
  <input type="submit">
</form>

suporte dos navegadores: [url]http://caniuse.com/#feat=form-validation[/url]
referência: [url]http://docs.webplatform.org/wiki/html/attributes/required[/url]

como assim? só colocando esse required ele já vai validar a data considerando tudo o que falei anteriormente (se o ano é bissexto, se o dia digitado é compativel com a quantidade de dias do mês digitado, se o numero do mês é compativel já que só existe 12 meses, etc)?

E
leandro318:
Erick Ribeiro:
leandro318:
Olá galera, estou precisando validar os campos de um formulário, já validei quase todos os campos usando java script, já conseguir validar o formato da data, ou seja, o sistema só vai aceitar datas no formado DD/MM/AAAA, agora tenho um problema: preciso validar essa data, levado em conta anos bissextos, quantidade de dias em cada mês. Exemplo

usuário digita: 29/02/2013
o sistema deve pedir que o usuário digite a data novamente, pois 2013 não é um ano bissexto

usuario digita: 29/02/2013
data válida, pois 2012 é um ano bissexto

usuario digita: 20/14/2011
data inválida, pois não existe mês 14.

E assim sucessivamente. No momento a parte de validar data do meu codigo java script está assim:
//Aqui estou verificando se o campo data foi prrenchido
if (dataentrada == ""){
	alert ('Preencha o campo com a data de entrada');    
	form_registra_entrada.dataentrada.focus();
	return false;
}
// Verificar se o formato da data digitada está correto		
var patternData = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
if(!patternData.test(dataentrada)){
    alert("Digite a data no formato Dia/Mês/Ano");
	form_registra_entrada.dataentrada.focus();
    return false;
}
//A partir daqui quero verificar se a data é válida

Se puderem ajudar agradeço.


na verdade você pode fazer isso com html5, ele já valida pra você automaticamente. Basta usar o required nos seus campos. Exemplo:

<form action="demo_form.py">
  Username: <input type="text" name="usrname" required>
  <input type="submit">
</form>

suporte dos navegadores: [url]http://caniuse.com/#feat=form-validation[/url]
referência: [url]http://docs.webplatform.org/wiki/html/attributes/required[/url]

como assim? só colocando esse required ele já vai validar a data considerando tudo o que falei anteriormente?

Sim. Veja esse exemplo que eu citei acima:
<form action="demo_form.py">  
  Data: <input type="date" name="data_entrada" required>  
  Username: <input type="text" name="usrname" required>  
  
  <input type="submit">  
</form>
edit note que vc tem que usar o campo de acordo com o dado que vc quer receber. Se vc quiser validar um telefone, por exemplo, use
<input type="tel" required/>
Se for um e-mail, use:
<input type="email" required/>
se for um número, use
<input type="number" required/>
L
Erick Ribeiro:
leandro318:
Erick Ribeiro:
leandro318:
Olá galera, estou precisando validar os campos de um formulário, já validei quase todos os campos usando java script, já conseguir validar o formato da data, ou seja, o sistema só vai aceitar datas no formado DD/MM/AAAA, agora tenho um problema: preciso validar essa data, levado em conta anos bissextos, quantidade de dias em cada mês. Exemplo

usuário digita: 29/02/2013
o sistema deve pedir que o usuário digite a data novamente, pois 2013 não é um ano bissexto

usuario digita: 29/02/2013
data válida, pois 2012 é um ano bissexto

usuario digita: 20/14/2011
data inválida, pois não existe mês 14.

E assim sucessivamente. No momento a parte de validar data do meu codigo java script está assim:
//Aqui estou verificando se o campo data foi prrenchido
if (dataentrada == ""){
	alert ('Preencha o campo com a data de entrada');    
	form_registra_entrada.dataentrada.focus();
	return false;
}
// Verificar se o formato da data digitada está correto		
var patternData = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
if(!patternData.test(dataentrada)){
    alert("Digite a data no formato Dia/Mês/Ano");
	form_registra_entrada.dataentrada.focus();
    return false;
}
//A partir daqui quero verificar se a data é válida

Se puderem ajudar agradeço.


na verdade você pode fazer isso com html5, ele já valida pra você automaticamente. Basta usar o required nos seus campos. Exemplo:

<form action="demo_form.py">
  Username: <input type="text" name="usrname" required>
  <input type="submit">
</form>

suporte dos navegadores: [url]http://caniuse.com/#feat=form-validation[/url]
referência: [url]http://docs.webplatform.org/wiki/html/attributes/required[/url]

como assim? só colocando esse required ele já vai validar a data considerando tudo o que falei anteriormente?

Sim. Veja esse exemplo que eu citei acima:
<form action="demo_form.py">  
  Data: <input type="date" name="data_entrada" required>  
  Username: <input type="text" name="usrname" required>  
  
  <input type="submit">  
</form>

pelo o que vi sobre esse atributo required ele só verifica se o campo está em branco, e se o formato está correto, mas ele não verifica se o dado é válido, como o que quero fazer, que é verificar se a data é válida.

E

Note que vc tem que usar o campo de acordo com o dado que vc quer receber.
No seu caso você deve usar:

Se vc quiser validar um telefone, por exemplo, use

Se for um e-mail, use:

se for um número, use

Referência: http://caniuse.com/#search=input

L

Erick Ribeiro:
Note que vc tem que usar o campo de acordo com o dado que vc quer receber.
No seu caso você deve usar:

Se vc quiser validar um telefone, por exemplo, use

Se for um e-mail, use:

se for um número, use

Referência: http://caniuse.com/#search=input

ele não valida data, fiz o teste aqui, primeiro deixei em branco, ele pediu pra preencher o campo, em seguida coloquei a data 30/02/2013 e ele passou direto, como se a data fosse válida.

E

leandro318:
Erick Ribeiro:
Note que vc tem que usar o campo de acordo com o dado que vc quer receber.
No seu caso você deve usar:

Se vc quiser validar um telefone, por exemplo, use

Se for um e-mail, use:

se for um número, use

Referência: http://caniuse.com/#search=input

ele não valida data, fiz o teste aqui, primeiro deixei em branco, ele pediu pra preencher o campo, em seguida coloquei a data 30/02/2013 e ele passou direto, como se a data fosse válida.


Em qual navegador vc está testando?

L

Erick Ribeiro:
leandro318:
Erick Ribeiro:
Note que vc tem que usar o campo de acordo com o dado que vc quer receber.
No seu caso você deve usar:

Se vc quiser validar um telefone, por exemplo, use

Se for um e-mail, use:

se for um número, use

Referência: http://caniuse.com/#search=input

ele não valida data, fiz o teste aqui, primeiro deixei em branco, ele pediu pra preencher o campo, em seguida coloquei a data 30/02/2013 e ele passou direto, como se a data fosse válida.


Em qual navegador vc está testando?

testei no Chrome e no firefox ambos estão na última versão

E

Bom, se ainda assim vc quiser usar JavaSrcipt, a expressão regular é essa:

var patternData = (((0[1-9]|[12][0-9]|3[01])([-./])(0[13578]|10|12)([-./])(\d{4}))|(([0][1-9]|[12][0-9]|30)([-./])(0[469]|11)([-./])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([-./])(02)([-./])(\d{4}))|((29)(\.|-|\/)(02)([-./])([02468][048]00))|((29)([-./])(02)([-./])([13579][26]00))|((29)([-./])(02)([-./])([0-9][0-9][0][48]))|((29)([-./])(02)([-./])([0-9][0-9][2468][048]))|((29)([-./])(02)([-./])([0-9][0-9][13579][26])));

Esse padrão vai
Validar: 29/02/2000 | 31/01/2000 | 30-01-2000
Desvalidar: 29/02/2002 | 32/01/2002 | 10/2/2002

L

Erick Ribeiro:
Bom, se ainda assim vc quiser usar JavaSrcipt, a expressão regular é essa:
EDIT: faz um teste nesse:

var patternData = (((0[1-9]|[12][0-9]|3[01])([-./])(0[13578]|10|12)([-./])(\d{4}))|(([0][1-9]|[12][0-9]|30)([-./])(0[469]|11)([-./])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([-./])(02)([-./])(\d{4}))|((29)(\.|-|\/)(02)([-./])([02468][048]00))|((29)([-./])(02)([-./])([13579][26]00))|((29)([-./])(02)([-./])([0-9][0-9][0][48]))|((29)([-./])(02)([-./])([0-9][0-9][2468][048]))|((29)([-./])(02)([-./])([0-9][0-9][13579][26])));

Esse padrão vai
Validar: 29/02/2000 | 31/01/2000 | 30-01-2000
Desvalidar: 29/02/2002 | 32/01/2002 | 10/2/2002

tem algo errado na sintaxe da expressão regular, por que quando a expressão está correta ela fica toda azul no programa notepad++, e aqui ela tá ficando preta, e fiz um teste e não validou, passou direto,
EDIT: descobri onde estava o erro: bastou adicionar a barra invertida onde houver barra normal, adicionar /^ no inicio da expressão, e no final da expressão adicionar $/, ficando assim:

var patternValidaData = /^(((0[1-9]|[12][0-9]|3[01])([-.\/])(0[13578]|10|12)([-.\/])(\d{4}))|(([0][1-9]|[12][0-9]|30)([-.\/])(0[469]|11)([-.\/])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([-.\/])(02)([-.\/])(\d{4}))|((29)(\.|-|\/)(02)([-.\/])([02468][048]00))|((29)([-.\/])(02)([-.\/])([13579][26]00))|((29)([-.\/])(02)([-.\/])([0-9][0-9][0][48]))|((29)([-.\/])(02)([-.\/])([0-9][0-9][2468][048]))|((29)([-.\/])(02)([-.\/])([0-9][0-9][13579][26])))$/;

feito isso ficou funcionou 100% , já fiz testes com todo tipo de data e valida de boa, vlw cara.

E

leandro318:
Erick Ribeiro:
Bom, se ainda assim vc quiser usar JavaSrcipt, a expressão regular é essa:
EDIT: faz um teste nesse:

var patternData = (((0[1-9]|[12][0-9]|3[01])([-./])(0[13578]|10|12)([-./])(\d{4}))|(([0][1-9]|[12][0-9]|30)([-./])(0[469]|11)([-./])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([-./])(02)([-./])(\d{4}))|((29)(\.|-|\/)(02)([-./])([02468][048]00))|((29)([-./])(02)([-./])([13579][26]00))|((29)([-./])(02)([-./])([0-9][0-9][0][48]))|((29)([-./])(02)([-./])([0-9][0-9][2468][048]))|((29)([-./])(02)([-./])([0-9][0-9][13579][26])));

Esse padrão vai
Validar: 29/02/2000 | 31/01/2000 | 30-01-2000
Desvalidar: 29/02/2002 | 32/01/2002 | 10/2/2002

tem algo errado na sintaxe da expressão regular, por que quando a expressão está correta ela fica toda azul no programa notepad++, e aqui ela tá ficando preta, e fiz um teste e não validou, passou direto,
EDIT: descobri onde estava o erro: bastou adicionar a barra invertida onde houver barra normal, adicionar /^ no inicio da expressão, e no final da expressão adicionar $/, ficando assim:

var patternValidaData = /^(((0[1-9]|[12][0-9]|3[01])([-.\/])(0[13578]|10|12)([-.\/])(\d{4}))|(([0][1-9]|[12][0-9]|30)([-.\/])(0[469]|11)([-.\/])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([-.\/])(02)([-.\/])(\d{4}))|((29)(\.|-|\/)(02)([-.\/])([02468][048]00))|((29)([-.\/])(02)([-.\/])([13579][26]00))|((29)([-.\/])(02)([-.\/])([0-9][0-9][0][48]))|((29)([-.\/])(02)([-.\/])([0-9][0-9][2468][048]))|((29)([-.\/])(02)([-.\/])([0-9][0-9][13579][26])))$/;

feito isso ficou funcionou 100% , já fiz testes com todo tipo de data e valida de boa, vlw cara.

Disponha.

Criado 7 de junho de 2013
Ultima resposta 7 de jun. de 2013
Respostas 11
Participantes 2