[supersaibal]Originariamente inviato da 13manuel84
il modo più semplice è fare tre campi diversi, uno per il giorno, uno per il mese e uno per l'anno e controllare che siano poi tutti numeri; magari controllando che il mese non super 12 etc...

oppure su vuoi lasciare il campo libero entrano in gioco le espressioni regolari. penso che una cosa così vada bene, per il formato gg/mm/aaaa, ma anche in questo caso dovresti splittare la stringa e controllare che i parametri della data non superino i numeri consentiti [giorno < 32, mese < 13...]
codice:
ereg ("^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$", $data)
[/supersaibal]
La vedo un po' incerta come soluzione. La regexp non fa quello che dovrebbe. Se provo ad inserire una data tipo 40 40 4000, la lascia passare convalidandola.

Relativamente all'uso dei tre campi, forse non è proprio il modo più semplice... difatti si può fare anche con un campo solo.

Basta semplicemente indicare all'utente che la data dev'essere inserita nel modo "dd mm yyyy" (esempio 31 01 1976). Cioè, i numeri che indicano il giorno il mese devono essere "preceduti dallo zero" e l'anno deve avere quattro cifre. Basta semplicemnte uno spazio per separare le cifre dd mm yyyy.

Dopo aver recuperato la data, basta solo controllarla così:
Codice PHP:
$checkData preg_match("/^(0[1-9]|3[01])\\s(0[1-9]|1[012])\\s((19|20)(20|90))$/"$data$reg); 
La regexp si occupa di controllare che i primi 2 caratteri siano numeri e non superiori a 31. Idem per i successivi 2 caratteri, tranne che il limite dev'essere 12. Infine, oltre a verificare che i restanti 4 caratteri siano numeri, convalida il parametro solo se l'intervallo è compreso tra il 1920 ed il 1990. (ovvio che studiandosela un po' la si può modificare come meglio si crede).

Aggiungo anche questo, solo per poter fare una prova veloce:
Codice PHP:
$sep " - "//separatore

if($checkData) {
echo 
"Data inserita: {$reg[1]} $sep {$reg[2]} $sep {$reg[3]}"//data riconosciuta
} else {
echo 
"Data non valida";

Esistono certamente molte altre valide soluzioni al problema, ma questo potrebbe essere un buon inizio. Scegli tu...