terça-feira, 17 de março de 2009

Validação de data e máscara de data (formato brasileiro)

Script para validação de data

/* check data */
var dtCh= "/";
var minYear=1900;
var maxYear=2100;
function isInteger(s){
var i;
for (i = 0; i < c =" s.charAt(i);"> "9"))) return false;
}
return true;
}
function stripCharsInBag(s, bag){
var i;
var returnString = "";
for (i = 0; i < c =" s.charAt(i);" 4 ="=" 100 ="=" 400 ="=" i =" 1;" i="=" i="=" i="=" i="=" i="=" daysinmonth =" DaysArray(12)" pos1="dtStr.indexOf(dtCh)" pos2="dtStr.indexOf(dtCh,pos1+1)" strday="dtStr.substring(0,pos1)" strmonth="dtStr.substring(pos1+1,pos2)" stryear="dtStr.substring(pos2+1)" stryr="strYear">1) strDay=strDay.substring(1)
if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
for (var i = 1; i <= 3; i++){ if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
}
month=parseInt(strMonth)
day=parseInt(strDay)
year=parseInt(strYr)
if (pos1==-1 || pos2==-1){
return false
}
if (strMonth.length<1>12){
return false
}
if (strDay.length<1>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
return false
}
if (strYear.length != 4 || year==0 || yearmaxYear){
return false
}
if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
return false
}
return true
}
/* fim check data */


Uso:

data_valor = "14/12/1973";
if(isDate(data_valor)){
alert('data válida');
}
else{
alert('data inválida');
}


Máscara de data

function mascaraData(e,objData){
var key;
var _ret = true;
var data_valor = objData.value;
if(window.event){key = e.keyCode;}
else if(e.which){key = e.which;}
if (key<48>57){_ret = false;}
if(_ret){
if (data_valor.length==2){
data_valor = data_valor + '/';
objData.value = data_valor;
}
else if (data_valor.length==5){
data_valor = data_valor + '/';
objData.value = data_valor;
}
}
if(key == 8 || key==9 || key==13){_ret = true;}
return _ret;
}


Uso:
obs: o script só permite entrada de números

< input name="datanasc" id="datanasc" onkeypress="return mascaraData(event,this)" maxlength="10" type="text">


obs2: coloquei um espaço entre o "<" e o input apenas para exibição do código.

Nenhum comentário: