L'espressione regolare è corretta anche se ridondante (specialmente nel controllo dell'anno, dove il 2003 viene validato perché la seconda alternativa piglia da 2000 a 2999):
Codice PHP:
function NumericDateIsOk($DdMmYyyy) {
return preg_match('/^(0[1-9]|[1-2]\\d|3[0-1])-(0[1-9]|1[0-2])-(200[7-9]|2[0-9]\\d{2})$/', $DdMmYyyy);
}
function controlla($data) {
if (NumericDateIsOk($data)) {
echo "$data: ok\n";
} else {
echo "$data: data non valida\n";
}
}
controlla('08-12-2008');
controlla('08-00-2008');
controlla('31-01-2003');
controlla('8-12-2006');
controlla('32-12-2007');
Risultato:
codice:
08-12-2008: ok
08-00-2008: data non valida
31-01-2003: ok
8-12-2006: data non valida
32-12-2007: data non valida
Controlla la tua variabile $date (specialmente che non abbia spazi).