Il modo migliore per convalidare il formato della stringa della data tramite jQuery

Ho trovato molti collegamenti per convalidare la stringa se si tratta di una data.

Come qui e qui .

Ma comunque non riesco a capire come convalidare se abbiamo questa cosa:

6/6/2012 dove il primo 6 è il mese e il secondo 6 è il giorno

e anche se l’utente lo inserisce in questo modo:

06/06/2012

Qualche idea su come potrebbe essere fatto in modo corretto?

Grazie!!

Qui, questo dovrebbe funzionare con qualsiasi formato di data con anno a 4 cifre e qualsiasi delimitatore. L’ho estratto dal mio plugin Ideal Forms che convalida le date e molto altro.

var isValidDate = function (value, userFormat) { var userFormat = userFormat || 'mm/dd/yyyy', // default format delimiter = /[^mdy]/.exec(userFormat)[0], theFormat = userFormat.split(delimiter), theDate = value.split(delimiter), isDate = function (date, format) { var m, d, y for (var i = 0, len = format.length; i < len; i++) { if (/m/.test(format[i])) m = date[i] if (/d/.test(format[i])) d = date[i] if (/y/.test(format[i])) y = date[i] } return ( m > 0 && m < 13 && y && y.length === 4 && d > 0 && d <= (new Date(y, m, 0)).getDate() ) } return isDate(theDate, theFormat) } 

Usa un’espressione regolare.

 var dateRegEx = /^(0[1-9]|1[012]|[1-9])[- /.](0[1-9]|[12][0-9]|3[01]|[1-9])[- /.](19|20)\d\d$/ console.log("06/06/2012".match(dateRegEx) !== null) // true console.log("6/6/2012".match(dateRegEx) !== null) // true console.log("6/30/2012".match(dateRegEx) !== null) // true console.log("30/06/2012".match(dateRegEx) !== null) // false 

Ulteriori informazioni su RegEx.

Modifica – Un disclaimer

Come ha sottolineato @elclanrs, questo convalida solo il formato della stringa e non la data effettiva, il che significa che le date come il 31 febbraio passerebbero. Tuttavia, poiché l’OP chiede solo ” per convalidare il formato della stringa della data “, terrò questa risposta qui perché per alcuni potrebbe essere tutto ciò che serve.

Come nota, il plugin jQuery Validation che l’OP stava usando, convalida anche solo il formato.

Infine, per chi si chiede, se è necessario convalidare la data, e non solo il formato, questa espressione regolare avrà un tasso di errore del 2% nel dominio di (1-12) / (1-31) / (1900- 2099) stringhe di data. Si prega di non utilizzare questo in codice Mission Critical per JPL.