Depois de verificar o formato de um número de telefone, vamos agora verificar se uma data entrada como uma cadeia de caracteres é válida.
Com certeza, poderiamos usar um selecionador de data como jQueryUI Datepicker para facilitar a experiência do usuário, mas o propósito deste artigo é mostrar-lhes as funções de validação de formulário jQuery avançadas, assim usamos um exemplo deliberadamente simplificado. Além disso, mesmo usando o selecionador de data, este validador ainda é útil, porque os seus visitantes podem entrar diretamente um valor no campo de entrada.
Neste caso, queremos reconhecer uma data no formato dd/mm/aaaa (por exemplo, 01/31/2011), entre o 1° de janeiro de 2000 e o dia de hoje.
Como sempre, no formulário HTML, definimos o comprimento máximo do campo de entrada da data no caso do javascript ser desativado (por isso temos de limpar os dados e validá-os do lado do servidor).
Como sempre, no formulário HTML, definimos o comprimento máximo do campo de entrada da data no caso do javascript ser desativado (por isso temos de limpar os dados e validá-os do lado do servidor).
<form id="myFormId" method="post">
<label for="dateId">Data</label>
<input type="text" name="date" id="dateId" maxlength="10" value="" /><br/>
<input type="submit" value="Enviar" />
</form>
O código de validação verifica numa primeira etapa se a data é escrita no formato esperado (dd/mm/aaaa), depois se é válida (ano bissexto, número máximo de dias desse mês), e se é depois do 1° de janeiro de 2000. Com certeza, o formato da data esperada pode ser facilmente modificado com a mudança da expressão regular e a maneira pela qual as variáveis year, month e day são inicializadas.
A mensagem de erro usa a cadeia de formato jQuery: contém uma variável entre colchetes ({0}) e o valor correspondente, neste caso, o ano entrado (new Array(year)):
jQuery.format('O mês de fevereiro do ano {0} tem 28 dias, no máximo.', new Array(year));
Mostramos a mensagem de erro com o método this.showErrors(errors) onde errors junta a mensagem de erro com o nome do elemento correspondente.
O conjunto das regras de validação liga-as ao identificador do formulário (myFormId) e ao atributo name do campo de entrada (date). A única regra aplicada é a regra definida pelo novo código de validação (myDateChecker). Chama-se da maneira seguinte: date-id: { myDateChecker: true } Contudo, também é possível chamá-lo assim: date: "myDateChecker" }. É uma questão de estilo pessoal.
$(document).ready(function(){
jQuery.validator.addMethod("myDateChecker", function(value, element) {
// value: dd/mm/yyyy
if(/^\d\d\/\d\d\/\d\d\d\d/i.test(value)) {
// check valid date
var year = substr(value, 6, 4);
var month = substr(value, 3, 2);
var day = substr(value, 0, 2);
if (month == 2) {
if (day == 29) {
if (year % 4 != 0 || year % 100 == 0 && year % 400 != 0) {
var errors = {};
errors[element.name] = jQuery.format('O mês de fevereiro do ano {0} tem 28 dias, no máximo.', new Array(year));
this.showErrors(errors);
}
}
else if (day > 28) {
var errors = {};
errors[element.name] = jQuery.format('O mês de fevereiro do ano {0} tem 28 dias, no máximo.', new Array(year));
this.showErrors(errors);
}
}
else if (month == 4 || month == 6 || month == 9 || month == 11) {
if (day > 30) {
var errors = {};
errors[element.name] = 'O mês entrado tem 30 dias, no máximo.';
this.showErrors(errors);
}
}
else {
if (day > 31) {
var errors = {};
errors[element.name] = 'O mês entrado tem 31 dias, no máximo.';
this.showErrors(errors);
}
}
var today = new Date();
today.setHours(23);
today.setMinutes(59);
today.setSeconds(59);
var new_epoch = new Date('2000', '0', '1');
var entered_date = new Date(year, month - 1, day, 23, 59, 59);
if ((entered_date > today) || (entered_date < new_epoch)) {
var errors = {};
errors[element.name] = 'Por favor insira uma data entre o 01/01/2000 e hoje (formato: dd/mm/aaaa).';
this.showErrors(errors);
}
else {
this.hideErrors();
return true;
}
}
else {
var errors = {};
errors[element.name] = 'Por favor insira uma data entre o 01/01/2000 e hoje (formato: dd/mm/aaaa).';
this.showErrors(errors);
}
return true;
});
$("#myFormId").validate({
rules: {
date: "myDateChecker"
}
});
});
Advanced jQuery Form validation (2): Validate a date (em inglês)
Validación de formulario jQuery avanzado (2): como validar una fecha (em espanhol)
Validation de formulaire jQuery avancée (2) : valider une date (em francês)
Sem comentários:
Enviar um comentário