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).