ciao,
volevo sapere se in php esiste un istruzione per controllare ke la data inserita sia effettivamente una data.
senza controllare che ci siano un tot di cifre, che ci siano le barre o i meno ecc ecc....
ciao,
volevo sapere se in php esiste un istruzione per controllare ke la data inserita sia effettivamente una data.
senza controllare che ci siano un tot di cifre, che ci siano le barre o i meno ecc ecc....
uy
ciao, tu vuoi fare un form dove gli utenti inseriscono la data? es. data di nascita? e vuoi ke sia assolutamente una data e non altro?
non vorrei dire una scemenza ma dovresti usare un'espressione regolare, prova a cercare con google, sicuramente trovi qualcosa.
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)![]()
Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone
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.[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...][/supersaibal]codice:ereg ("^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$", $data)
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ì: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).Codice PHP:
$checkData = preg_match("/^(0[1-9]|3[01])\\s(0[1-9]|1[012])\\s((19|20)(20|90))$/", $data, $reg);
Aggiungo anche questo, solo per poter fare una prova veloce:Esistono certamente molte altre valide soluzioni al problema, ma questo potrebbe essere un buon inizio. Scegli tu...Codice PHP:
$sep = " - "; //separatore
if($checkData) {
echo "Data inserita: {$reg[1]} $sep {$reg[2]} $sep {$reg[3]}"; //data riconosciuta
} else {
echo "Data non valida";
}
![]()
[supersaibal]Originariamente inviato da pierotto
checkdate() [/supersaibal]
Ma bravo! che falco...![]()
La funzione checkdate, pur essendo dedicata, ha un piccolo difetto: accetta come valido anche l'anno 32767. (Dal manuale: anno è compreso tra 1 e 32767 ) ...Bello, eh?
Questo è solo un semplice esempio:...io resto del parere che per "controllare seriamente" qualcosa, non al livello elementare però, bisogna fare ricorso alle espressioni regolari (Perl compatibili, quando possibile!).Codice PHP:
$g = 31;
$m = 1;
$a = 1976; //ma è considerato valido l'anno 1 ...oohh?! oppure il 3000!
$checkData = checkdate($m,$g,$a);
if($checkData) echo "$g/$m/$a è una data valida!";
![]()
mmhh complicarsi la vita, la cosa + semplice fare 3 <select><option> gioeno mese anno, li non si scappa e non devi star li a scrivere, se proprio vuoi scrivere qualcosa
giorno= controlla ke sia un numero, ke siam >0 e <31, e poi qualche if x i gioni di 30 e x febbraio
mese= controllo ke sia >0 e <12, tt li
anno= ke sia > 1900 e minore a <2005
se proprio propio l'utente deve scriverla sta data