ho appena scritto una regex per controllare un datetime MySQL (e penso che non è così diff erent per Oracle o altri server di database).
Questo ReGex è molto sicuro e controlla la validità della data (mesi in 28, 30 & 31 giorni e anche anni con 29/02). Quindi, controlla il tempo. Il formato timestamp è questo:
AAAA-MM-GG HH: MM: SS
Ecco il Regex (piuttosto lungo):
((((19|20)([2468][048]|[13579][26]|0[48])|2000)-02-29|((19|20)[0-9]{2}-(0[4678]|1[02])-(0[1-9]|[12][0-9]|30)|(19|20)[0-9]{2}-(0[1359]|11)-(0[1-9]|[12][0-9]|3[01])|(19|20)[0-9]{2}-02-(0[1-9]|1[0-9]|2[0-8])))\s([01][0-9]|2[0-3]):([][0-9]):([][0-9]))
Partite
2013-04-05 17:59:59 | 2013-07-30 01:22:42 | 2099-12-30 23:59:59 | 2016-02-28 00:00:00
non-match
2016-02-29 -01: 01: 02 | 3000-04-24 17:42:21 | 2012-03-03 24:24:02 | 2012-03-03 21:60:45
Non credo di poterne fare uno più sicuro. Molto funzionale e testato. Per favore, se lo si utilizza, non esitate a darmi le risposte;)
FYI: Se si guarda per il controllo della data Regex senza tempo, si prega di andare lì per trovarlo: Regular Expression to match valid dates (controllare il mio post) .
Acclamazioni
È 2009/14/35 27:63:60 valida? In caso contrario, sarà brutto con espressioni regolari. – balpha
Che lingua stai usando? Se questo è Perl, puoi invocare il codice dalla regex, che è probabilmente l'unico modo per eseguire un controllo di facile lettura. Solo il codice per convalidare se è un anno bisestile per convalidare se il 29 febbraio esista renderebbe la cosa brutta come tutti escono. –
Ho parlato di regex, solo come suggerimento. Sto usando Javascript e benvenuto a qualsiasi alternativa. –