[RESOLVIDO] Como validar data com java script?

11 respostas
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.

11 Respostas

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">
  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

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 (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)?

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>
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/>
leandro318
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.

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

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.

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?

leandro318

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

Erick_Ribeiro

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

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.

Erick_Ribeiro

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