Newsgroup: it.lavoro.professioni.webmaster
Titolo: Espressione regolare per data

Saluti,
Questa è una regexp che valida le date nel formato gg/mm/aaaa, 
considerando anche gli anni bisestili.
^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$
Il mio problema è che la suddetta regexp valida date dal 1900 al 9999. 
Qualcuno saprebbe dirmi come modificarla per accettare date dal 1900 al 
2006?
Grazie
Paolo
P.S. questa è utilizzata lato client via Ajax, poi lato server me la 
svango via php anche senza modificare la regexp perchè sono in grado di 
lavorare tranquillamente sul valore passato, mentre intervenire sul 
codice js 'after' regexp va al di là delle mie conoscenze di js.
-- 
=====================
L'indirizzo riportato come reply non è valido. Per contattarmi in 
privato rispondere al presente messaggio nel newsgroup, indicando 
l'indirizzo a cui si desidera essere contattati.

S_p_ike ha scritto:

Secondo me stai facendo lavoro inutile.
Ci sono gia le funzioni standard che controllano la data. In asp, ad
esempio, c'è isdate(data) che controlla che sia una data valida ed
esistente.
Forse devi fare qualcosa di specifico?

FuSioNmAn ha scritto:

Beh, lato client ho un comodo script di validazione che mi consente (tra 
le varie features, in primis validazione istantanea mentre si compila) 
di usare le espressioni regolari (di cui esiste in rete un ottimo 
repository). In genere per le date lato client uso spiffycal evitando 
quindi problemi di inserimento non conforme, ma in questo caso 
l'integrazione tra lo script di validazione e spiffycal mi avrebbe 
portato via troppo tempo. Di qui la scelta di usare solo lo script di 
validazione.
Lato server, esiste (in php) checkdate, ma a parte che richiede come 
argomenti i valori separati di giorno mese anno, questa valida qualsiasi 
anno tra 1 e 32767, cosa che non mi va bene. Ok posso lavorare sul 
valore immesso, scorporare i valori tra /, fare un check sull'anno e 
quindi passare i valori a checkdate: un sacco di lavoro che con 
l'espressione regolare è fatto in una riga. Tutto qui.


S_p_ike ha scritto:

Aspetta un attimo. Non avevo letto il P.S. ecco perchè non avevo
capito bene :D
Dunque era lato client che ti serviva...
In effetti con ajax puoi fare un post, ad una pagina server, del valore
digitato senza ricaricare la pagina e gestire quindi il controllo lato
server.
In alternativa usi una funzione javascript praticamente...
Sto provando a dare un occhio ma non riesco a decifrarla bene...
Le RegExp sono potentissime ma bisogna imparare bene come funzionano

 
Temporaneamente ho risolto lasciando i controlli lato client come sono e 
lato server uso una diversa procedura per validare la data. L'unica cosa 
non eccezionale, ma non importa, è che in qualche caso (anno > (anno 
attuale -10)) un campo può risultare validato lato client ma non lato 
server. Pazienza, daltronde è un campo per la data di nascita e se uno 
scrive 2012 si becca il dover ricompilare il campo. Con le dovute 
spiegazioni si tratta solo di tornare indietro e mettere a posto quel 
campo.


 campo.
Scusa ma non ti convine fare una form fatta di liste divise per giorno mese
e anno? Io faccio sempre cosě e risolvo, per l'anno, visto che una data di
nascita, basta che fai una list che va da 1900 all'anno in corso.
Ciao Stefano