mi sapete dire perchè questa reg exp non funziona con le date del 2000?

Codice PHP:
preg_match("/(0[1-9]|[12][0-9]|3[01])[-\.\s](0[1-9]|1[012])[-\.\s][(19|20)]\d{2}/)"$data
se io la inserisco in un semplice codice che mi verifica la data tipo questo:

Codice PHP:
$verificaData ControlloData("1/1/00");
var_dump($verificaData);


function 
ControlloData($data){
    if(
preg_match("/(0[1-9]|[12][0-9]|3[01])[-\.\s](0[1-9]|1[012])[-\.\s][(19|20)]\d{2}/"$data)){
        echo 
"non sono numeri 
"
;
        return 
false;
    }else{
        echo 
"numeri verificati 
"
;
        
$data str_replace(" ""-"$data);
        
$data str_replace(".""-"$data);
        
$data str_replace("/""-"$data);
        
$arrayData explode("-"$data);
        
$Giorno $arrayData[0];
        
$Mese $arrayData[1];
        
$Anno $arrayData[2];
        if(!
checkdate($Mese$Giorno$Anno)){
            return 
false;
        }else{
            return 
true;
        }
    }

vorrei trovare una forma che mi desse la possibilità di verificare le date sia che ci siano o meno le 2 cifre per i mesi e i giorni, sia che ci siano o meno le 4 cifre per l'anno (che quindi potrebbero essere anche 3,2 o 1).

poi dovrei trovare anche una reg exp per usarla nel preg_replace per sostituire i vari
str_replace, ovvero un qualcosa che mi faccia sostituire qualsiasi carattere ci sia tra il giorno e il mese e tra il mese e l'anno, con il simbolo - (trattino)