[RESOLVIDO] Como validar data com java script?

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.

[quote=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.[/quote]
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

[quote=Erick Ribeiro][quote=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.[/quote]
na verdade você pode fazer isso com html5, ele já valida pra você automaticamente. Basta usar o required nos seus campos. Exemplo:

[code]
<form action=“demo_form.py”>
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
[/code][/quote]

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

[quote=leandro318][quote=Erick Ribeiro][quote=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.[/quote]
na verdade você pode fazer isso com html5, ele já valida pra você automaticamente. Basta usar o required nos seus campos. Exemplo:

[code]
<form action=“demo_form.py”>
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
[/code][/quote]

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

Sim. Veja esse exemplo que eu citei acima:

[code]<form action=“demo_form.py”>
Data: <input type=“date” name=“data_entrada” required>
Username: <input type=“text” name=“usrname” required>

<input type=“submit”>
</form> [/code]

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 &lt;input type="tel" required/&gt;
Se for um e-mail, use:

se for um número, use

[quote=Erick Ribeiro][quote=leandro318][quote=Erick Ribeiro][quote=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.[/quote]
na verdade você pode fazer isso com html5, ele já valida pra você automaticamente. Basta usar o required nos seus campos. Exemplo:

[code]
<form action=“demo_form.py”>
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
[/code][/quote]

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

Sim. Veja esse exemplo que eu citei acima:

[code]<form action=“demo_form.py”>
Data: <input type=“date” name=“data_entrada” required>
Username: <input type=“text” name=“usrname” required>

<input type=“submit”>
</form> [/code][/quote]

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.

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

[quote=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[/quote]

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.

[quote=leandro318][quote=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[/quote]

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.[/quote]
Em qual navegador vc está testando?

[quote=Erick Ribeiro][quote=leandro318][quote=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[/quote]

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.[/quote]
Em qual navegador vc está testando?[/quote]

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

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

[quote=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[/quote]

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.

[quote=leandro318][quote=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[/quote]

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.[/quote]

Disponha.