Javascript – Regex per convalidare il formato della data

C’è un modo per avere una regex in JavaScript che convalida le date di più formati, come: GG-MM-AAAA o GG.MM.AAAA o GG / MM / AAAA ecc.? Ho bisogno di tutto questo in una regex e non sono molto bravo con questo. Finora ho trovato questo: var dateReg = /^\d{2}-\d{2}-\d{4}$/; per DD-MM-YYYY. Devo solo convalidare il formato della data, non la data stessa.

È ansible utilizzare una class di caratteri ( [./-] ) in modo che i separatori possano essere uno qualsiasi dei caratteri definiti

 var dateReg = /^\d{2}[./-]\d{2}[./-]\d{4}$/ 

O meglio ancora, abbina la class di caratteri per il primo separatore, quindi immortala come gruppo ([./-]) e usa un riferimento al gruppo catturato \1 per abbinare il secondo separatore, che assicurerà che entrambi i separatori siano stesso:

 var dateReg = /^\d{2}([./-])\d{2}\1\d{4}$/ "22-03-1981".match(dateReg) // matches "22.03-1981".match(dateReg) // does not match "22.03.1981".match(dateReg) // matches 

Formato, giorni, mesi e anno:

var regex = /^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$/;

La regex suggerita non convaliderà la data, solo il pattern.

Quindi 99.99.9999 passerà la regex.

In seguito hai specificato che devi solo convalidare il pattern, ma penso ancora che sia più utile creare un object data

 function isDate(str) { var parms = str.split(/[\.\-\/]/); var yyyy = parseInt(parms[2],10); var mm = parseInt(parms[1],10); var dd = parseInt(parms[0],10); var date = new Date(yyyy,mm-1,dd,0,0,0,0); return mm === (date.getMonth()+1) && dd === date.getDate() && yyyy === date.getFullYear(); } var dates = [ "13-09-2011", "13.09.2011", "13/09/2011", "08-08-1991", "29/02/2011" ] for (var i=0;i 

Usa parentesi / /^\d{2}[.-/]\d{2}[.-/]\d{4}$/ http://download.oracle.com/javase/tutorial/essential/regex /char_classs.html

È ansible utilizzare espressioni multiple regolari con l’uso dell’operatore OR (|).

 function validateDate(date){ var regex=new RegExp("([0-9]{4}[-](0[1-9]|1[0-2])[-]([0-2]{1}[0-9]{1}|3[0-1]{1})|([0-2]{1}[0-9]{1}|3[0-1]{1})[-](0[1-9]|1[0-2])[-][0-9]{4})"); var dateOk=regex.test(date); if(dateOk){ alert("Ok"); }else{ alert("not Ok"); } } 

La funzione sopra riportata può validare i formati di data AAAA-MM-GG, GG-MM-AAAA. Puoi semplicemente estendere l’espressione regolare per convalidare qualsiasi formato di data. Supponete di voler validare YYYY / MM / DD, basta sostituire “[-]” con “[- | /]”. Questa espressione può convalidare date a 31, mesi a 12. Ma gli anni bisestili e i mesi termina con 30 giorni non sono convalidati.

Prova questo:

 ^\d\d[./-]\d\d[./-]\d\d\d\d$ 

Non reinventare la ruota. Utilizzare una soluzione predefinita per le date di analisi, ad esempio http://www.datejs.com/

@mplungjan, @ eduard-luca

 function isDate(str) { var parms = str.split(/[\.\-\/]/); var yyyy = parseInt(parms[2],10); var mm = parseInt(parms[1],10); var dd = parseInt(parms[0],10); var date = new Date(yyyy,mm-1,dd,12,0,0,0); return mm === (date.getMonth()+1) && dd === date.getDate() && yyyy === date.getFullYear(); } 

new Date () usa l’ora locale, l’ora 00:00:00 mostrerà l’ultimo giorno in cui sono presenti gli eventi “Ora legale” o “Ora legale (ora legale)”.

Esempio:

 new Date(2010,9,17) Sat Oct 16 2010 23:00:00 GMT-0300 (BRT) 

Un’altra alternativa è usare getUTCDate ().

Per assicurarti che funzioni, devi convalidarlo.

 function mmIsDate(str) { if (str == undefined) { return false; } var parms = str.split(/[\.\-\/]/); var yyyy = parseInt(parms[2], 10); if (yyyy < 1900) { return false; } var mm = parseInt(parms[1], 10); if (mm < 1 || mm > 12) { return false; } var dd = parseInt(parms[0], 10); if (dd < 1 || dd > 31) { return false; } var dateCheck = new Date(yyyy, mm - 1, dd); return (dateCheck.getDate() === dd && (dateCheck.getMonth() === mm - 1) && dateCheck.getFullYear() === yyyy); }; 

Se si desidera convalidare la date(YYYY-MM-DD) insieme al confronto, verrà utilizzata per intero …

  function validateDate() { var newDate = new Date(); var presentDate = newDate.getDate(); var presentMonth = newDate.getMonth(); var presentYear = newDate.getFullYear(); var dateOfBirthVal = document.forms[0].dateOfBirth.value; if (dateOfBirthVal == null) return false; var validatePattern = /^(\d{4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})$/; dateValues = dateOfBirthVal.match(validatePattern); if (dateValues == null) { alert("Date of birth should be null and it should in the format of yyyy-mm-dd") return false; } var birthYear = dateValues[1]; birthMonth = dateValues[3]; birthDate= dateValues[5]; if ((birthMonth < 1) || (birthMonth > 12)) { alert("Invalid date") return false; } else if ((birthDate < 1) || (birthDate> 31)) { alert("Invalid date") return false; } else if ((birthMonth==4 || birthMonth==6 || birthMonth==9 || birthMonth==11) && birthDate ==31) { alert("Invalid date") return false; } else if (birthMonth == 2){ var isleap = (birthYear % 4 == 0 && (birthYear % 100 != 0 || birthYear % 400 == 0)); if (birthDate> 29 || (birthDate ==29 && !isleap)) { alert("Invalid date") return false; } } else if((birthYear>presentYear)||(birthYear+70presentMonth+1) { alert("Invalid date") return false; } else if(birthMonth==presentMonth+1) { if(birthDate>presentDate) { alert("Invalid date") return false; } } } return true; } 

Si prega di trovare nel codice sottostante che consente di eseguire la convalida della data per qualsiasi formato fornito o in base alle impostazioni locali dell’utente per convalidare inizio / partenza e fine / data. Potrebbero esserci approcci migliori, ma sono arrivati ​​a questo. L’ho provato per i formati: MM / gg / aaaa, gg / MM / aaaa, aaaa-MM-gg, aaaa.MM.dd, aaaa / MM / gg e gg-MM-aaaa.

Il formato della data e la data della nota forniti vanno di pari passo.

   

Di seguito è riportato lo snippet HTML