Script javascript: Controllo validità formato ed esistenza data

   difficoltà:  script script script script script

Script simili
19/2/2008


Abbiamo visto in precedenza come controllare la validità di una data in php vedremo ora come eseguire il controllo di validità sia del formato della data che di esistenza della data in javascript.

Per prima cosa con le espressioni regolari controlleremo se il formato di inserimento sarà corretto nel formato gg/mm/aaaa. Ecco come:

stringa="12/02/2008";
var espressione = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
if (!espressione.test(stringa))
{
alert("Formato Sbagliato");
}else{
alert("Formato Corretto");
}

Nel caso sia corretto il formato dobbiamo controllare che la data sia effettivamente una data valida ed esistente.
Preleviamo dalla stringa in formato data gg/mm/aaaa i valori del giorno, mese e anno:
anno = parseInt(stringa.substr(6),10);
mese = parseInt(stringa.substr(3, 2),10);
giorno = parseInt(stringa.substr(0, 2),10);

Con parseInt trasformiamo il valore in un numero, quindi, ad esempio, "02" diventerà 2 (,10 perchè parliamo di numeri in base 10).

Ora utilizzando la funzione Date() di javascript creeremo una nuova data che avrà come giorno, mese e anno quelli ricavati. La funzione Date() funzionano così:
var data=new Date(anno, mese-1, giorno);

Ho scritto mese-1 poiché i mesi vanno da 0 a 11, per cui sarà il mese prescelto -1 il valore da inserire nel mese. La comodità di questa funzione è che se inseriremo una data che non esiste la ricostruirà in modo corretto. ad esempio:
var data=new Date(2008, 0, 32);

Non sarà il 32 gennaio, ma il primo febbraio.
Per cui ci basterà confrontare la data ottenuta creando una nuova data con i dati ottenuti prelevando giorno, mese e anno dalla stringa gg/mm/aaaa con il giorno mese e anno prelevati.

Se ad esempio controlleremo la validità di 32/01/2008. vedremo che il giorno, mese e anno saranno rispettivamente, 1-2-2008 che saranno diversi da 32-1-2008.


Vediamo ora la funzione completa che ci chiarirà ulteriormente le idee:
function controllo_data(stringa){
var espressione = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
if (!espressione.test(stringa))
{
return false;
}else{
anno = parseInt(stringa.substr(6),10);
mese = parseInt(stringa.substr(3, 2),10);
giorno = parseInt(stringa.substr(0, 2),10);

var data=new Date(anno, mese-1, giorno);
if(data.getFullYear()==anno && data.getMonth()+1==mese && data.getDate()==giorno){
return true;
}else{
return false;
}
}
}





Commenti


  Paolo

15/3/2011 15:31:28

Bello scriptino, ti ho dato 3 euro perchè è giusto che te ne venga qualche cosa.



Lascia un commento


Codice di controllo*:
Nome*:
Email/Link:
Testo*:
 
I campi contrassegnati con * sono obbligatori.