Discussione:
Espressione regolare per data
(troppo vecchio per rispondere)
S_p_ike
2006-10-25 16:43:11 UTC
Permalink
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.
FuSioNmAn
2006-10-26 07:18:27 UTC
Permalink
Post by S_p_ike
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.
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?
S_p_ike
2006-10-26 08:09:49 UTC
Permalink
Post by FuSioNmAn
Post by S_p_ike
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.
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?
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.
--
=====================

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.
FuSioNmAn
2006-10-26 10:49:18 UTC
Permalink
Post by S_p_ike
Post by FuSioNmAn
Post by S_p_ike
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.
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?
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.
--
=====================
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.
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
S_p_ike
2006-10-26 12:58:45 UTC
Permalink
Post by FuSioNmAn
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.
--
=====================

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.
Stefano
2006-10-29 14:13:26 UTC
Permalink
Post by S_p_ike
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.
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

Continua a leggere su narkive:
Loading...