domenica 9 ottobre 2011

php funzione ControlloData

Con questa funzione accettiamo come data valida nel formato giorno mese e anno i seguenti formati

07-01-2011
07/01/2011
07.01.2011
7-1-2011
7/1/2011
7.1.2011
07.1.2011
7.01.2011
07012011

con l'istruzione str_repalce sostituiamo i caratteri / e . con -

con l'istruzione strlen($data) contiamo la lunghezza del campo data

con l'istruzione explode trasformiamo la stringa $data in un vettore di tanti elementi + 1 di quanti sono i trattini (carattere separatore trasformato da str_repalce (2 trattini = 3 elementi) e :

Controlliamo se la lunghezza del campo giorno e/o mese è 1 nel qual caso aggiungiamo uno 0 davanti trasformando 1 in 01

ricostruiamo la data che può essere o lunga 10 o lunga 8 se non c'erano trattini nella data di partenza.

Con l'istruzione ereg controlliamo che nelle posizioni del giorno mese e anno ci sia un numero da 0 e 9

e per ultimo con l'istruzione checkdate controlliamo la congruenza della data.


Per mia comodità ho inserito anche il controllo su limiti di accettabilità della data dal 1890 al 2110.

La funzione restituisce false nel caso di data non valida e restituisce la data normalizzata in caso di data valida esempio 1/1/2011 ritorna 01-01-2011


Il programma chiamante chiama la funzione in questo modo:

$data = $fgiorno // $fgiorno = data di input non normalizzata
if(!ControlloData($data))
{echo "data non corretta ".$fgiorno;
}
else
{ echo $data; //.. data corretta }




function ControlloData(&$data)
// non togliere la &commerciale
// controlla e ritorna la data girata
// la &commerciale significa che viene passato l'indirizzo del campo data
// e non una copia del campo data
{
$data = str_replace('/' , '-' , $data , $num);
$data = str_replace('.' , '-' , $data , $num);

if ((strlen($data) == 8) || (strlen($data) == 9))
{$arrayData = explode("-", $data);
$Giorno = $arrayData[0];
$Mese = $arrayData[1];
$Anno = $arrayData[2];
}
if (strlen($Giorno) == 1 )
{$Giorno = "0".$Giorno;
$data = $Giorno."-".$Mese."-".$Anno;
}

if (strlen($Mese) == 1 )
{$Mese = "0".$Mese;
$data = $Giorno."-".$Mese."-".$Anno;
}


if (strlen($data)== 10)
{
if(!ereg("^[0-9]{2}-[0-9]{2}-[0-9]{4}$", $data))
{
return false;
}
else
{
$arrayData = explode("-", $data);
$Giorno = $arrayData[0];
$Mese = $arrayData[1];
$Anno = $arrayData[2];
if(!checkdate($Mese, $Giorno, $Anno))
{
return false;
}
}
}
else
{if (strlen($data)== 8)
{
if(!ereg("^[0-9]{8}$", $data))
{
return false;
}
else
{
$Giorno = substr($data, 0, 2);
$Mese = substr($data, 2, 2);
$Anno = substr($data, 4);

if(!checkdate($Mese, $Giorno, $Anno))
{
return false;
}
}
}
else
{
return false;
}
}

if ((strlen($Anno) == 4) && ($Anno > 1890) && ($Anno < 2110))
{
$data = $Anno."-".$Mese."-".$Giorno;
return $data;
}
else
{ return false;
}
}

Nessun commento:

Posta un commento