yyyy validar regular mayor fechas fecha expresión expresion actual javascript validation date

regular - Javascript: cómo validar las fechas en el formato MM-DD-YYYY?



validar fecha javascript expresion regular (18)

Vi una posible respuesta aquí, pero fue por YYYY-MM-DD: validación de fecha de JavaScript

Modifiqué el código de código anterior para MM-DD-YYYY así, pero todavía no puedo hacer que funcione:

String.prototype.isValidDate = function() { var IsoDateRe = new RegExp("^([0-9]{2})-([0-9]{2})-([0-9]{4})$"); var matches = IsoDateRe.exec(this); if (!matches) return false; var composedDate = new Date(matches[3], (matches[1] - 1), matches[2]); return ((composedDate.getMonth() == (matches[1] - 1)) && (composedDate.getDate() == matches[2]) && (composedDate.getFullYear() == matches[3])); }

¿Cómo puedo hacer que el código anterior funcione para MM-DD-YYYY y mejor aún MM / DD / YYYY?

Gracias.


¿Qué no está trabajando al respecto? aquí hay una versión probada:

String.prototype.isValidDate = function() { var match = this.match(/^([0-9]{2})//([0-9]{2})//([0-9]{4})$/); var test = new Date(match[3], match[1] - 1, match[2]); return ( (test.getMonth() == match[1] - 1) && (test.getDate() == match[2]) && (test.getFullYear() == match[3]) ); } var date = ''12/08/1984''; // Date() is ''Sat Dec 08 1984 00:00:00 GMT-0800 (PST)'' alert(date.isValidDate() ); // true


¿Qué tal validar las fechas en formato de fecha "CUALQUIERA"? He estado usando la biblioteca DateJS y añadiéndola a formularios existentes para garantizar que obtenga fechas y horas válidas formateadas de la manera que quiero. El usuario puede incluso ingresar cosas como "ahora" y "mañana" y se convertirá en una fecha válida.

Aquí está la biblioteca de dateJS: http://www.datejs.com/

y aquí hay un consejo de jQuery que escribí: http://www.ssmedia.com/utilities/jquery/index.cfm/datejs.htm


DateFormat = DD.MM.YYYY o DMYYYY

function dateValidate(val){ var dateStr = val.split(''.''); var date = new Date(dateStr[2], dateStr[1]-1, dateStr[0]); if(date.getDate() == dateStr[0] && date.getMonth()+1 == dateStr[1] && date.getFullYear() == dateStr[2]) { return date; } else{ return ''NotValid'';} }


Esta función validará la fecha para ver si es correcta o si está en el formato adecuado de: DD / MM / YYYY.

function isValidDate(date) { var matches = /^(/d{2})[-//](/d{2})[-//](/d{4})$/.exec(date); if (matches == null) return false; var d = matches[1]; var m = matches[2]-1; var y = matches[3]; var composedDate = new Date(y, m, d); return composedDate.getDate() == d && composedDate.getMonth() == m && composedDate.getFullYear() == y; } console.log(isValidDate(''10-12-1961'')); console.log(isValidDate(''12/11/1961'')); console.log(isValidDate(''02-11-1961'')); console.log(isValidDate(''12/01/1961'')); console.log(isValidDate(''13-11-1961'')); console.log(isValidDate(''11-31-1961'')); console.log(isValidDate(''11-31-1061''));


Esto es para validar la cadena de fecha en formato dd.mm.yyyy. Es fácil de personalizar. Solo necesita ajustar pos1 y pos2 en isValidDate ().

var dtCh = "."; var minYear = 1900;

function isInteger(s){ var i; for (i = 0; i < s.length; i++){ // Check that current character is number. var c = s.charAt(i); if (((c < "0") || (c > "9"))) return false; } // All characters are numbers. return true; } function stripCharsInBag(s, bag){ var i; var returnString = ""; // Search through string''s characters one by one. // If character is not in bag, append to returnString. for (i = 0; i < s.length; i++){ var c = s.charAt(i); if (bag.indexOf(c) == -1) returnString += c; } return returnString; } function daysInFebruary (year){ // February has 29 days in any year evenly divisible by four, // EXCEPT for centurial years which are not also divisible by 400. return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 ); } function DaysArray(n) { for (var i = 1; i <= n; i++) { this[i] = 31; if (i==4 || i==6 || i==9 || i==11) { this[i] = 30; } if (i==2) { this[i] = 29; } } return this; } function isValidDate(dtStr){ var daysInMonth = DaysArray(12); var pos1=dtStr.indexOf(dtCh); var pos2=dtStr.indexOf(dtCh,pos1+1); var strDay=dtStr.substring(0,pos1); var strMonth=dtStr.substring(pos1+1,pos2); var strYear=dtStr.substring(pos2+1); strYr=strYear; if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1); if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1); for (var i = 1; i <= 3; i++) { if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1); } month=parseInt(strMonth); day=parseInt(strDay); year=parseInt(strYr); if (pos1==-1 || pos2==-1){ alert("The date format should be : dd.mm.yyyy"); return false; } if (strMonth.length<1 || month<1 || month>12){ alert("Please enter a valid month"); return false; } if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){ alert("Please enter a valid day"); return false; } if (strYear.length != 4 || year==0 || year<minYear){ alert("Please enter a valid 4 digit year after "+minYear); return false; } if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){ alert("Please enter a valid date"); return false; } return true; }


Manera simple de resolver

var day = document.getElementById("DayTextBox").value; var regExp = /^([1-9]|[1][012])//|-([1-9]|[1][0-9]|[2][0-9]|[3][01])//|-([1][6-9][0-9][0-9]|[2][0][01][0-9])$/; return regExp.test(day);


Por favor, encuentre en el código a continuación que le permite realizar la validación de fecha para cualquiera de los formatos suministrados o en función de la configuración regional del usuario para validar las fechas de inicio / finalización y finalización. Podría haber algunos enfoques mejores, pero han surgido con esto. Lo he probado para formatos como: MM / dd / aaaa, dd / MM / aaaa, aaaa-MM-dd, aaaa.MM.dd, aaaa / MM / dd y dd-MM-aaaa.

Tenga en cuenta que el formato de fecha y la fecha de la cadena van de la mano.

<script type="text/javascript"> function validate(format) { if(isAfterCurrentDate(document.getElementById(''start'').value, format)) { alert(''Date is after the current date.''); } else { alert(''Date is not after the current date.''); } if(isBeforeCurrentDate(document.getElementById(''start'').value, format)) { alert(''Date is before current date.''); } else { alert(''Date is not before current date.''); } if(isCurrentDate(document.getElementById(''start'').value, format)) { alert(''Date is current date.''); } else { alert(''Date is not a current date.''); } if (isBefore(document.getElementById(''start'').value, document.getElementById(''end'').value, format)) { alert(''Start/Effective Date cannot be greater than End/Expiration Date''); } else { alert(''Valid dates...''); } if (isAfter(document.getElementById(''start'').value, document.getElementById(''end'').value, format)) { alert(''End/Expiration Date cannot be less than Start/Effective Date''); } else { alert(''Valid dates...''); } if (isEquals(document.getElementById(''start'').value, document.getElementById(''end'').value, format)) { alert(''Dates are equals...''); } else { alert(''Dates are not equals...''); } if (isDate(document.getElementById(''start'').value, format)) { alert(''Is valid date...''); } else { alert(''Is invalid date...''); } } /** * This method gets the year index from the supplied format */ function getYearIndex(format) { var tokens = splitDateFormat(format); if (tokens[0] === ''YYYY'' || tokens[0] === ''yyyy'') { return 0; } else if (tokens[1]=== ''YYYY'' || tokens[1] === ''yyyy'') { return 1; } else if (tokens[2] === ''YYYY'' || tokens[2] === ''yyyy'') { return 2; } // Returning the default value as -1 return -1; } /** * This method returns the year string located at the supplied index */ function getYear(date, index) { var tokens = splitDateFormat(date); return tokens[index]; } /** * This method gets the month index from the supplied format */ function getMonthIndex(format) { var tokens = splitDateFormat(format); if (tokens[0] === ''MM'' || tokens[0] === ''mm'') { return 0; } else if (tokens[1] === ''MM'' || tokens[1] === ''mm'') { return 1; } else if (tokens[2] === ''MM'' || tokens[2] === ''mm'') { return 2; } // Returning the default value as -1 return -1; } /** * This method returns the month string located at the supplied index */ function getMonth(date, index) { var tokens = splitDateFormat(date); return tokens[index]; } /** * This method gets the date index from the supplied format */ function getDateIndex(format) { var tokens = splitDateFormat(format); if (tokens[0] === ''DD'' || tokens[0] === ''dd'') { return 0; } else if (tokens[1] === ''DD'' || tokens[1] === ''dd'') { return 1; } else if (tokens[2] === ''DD'' || tokens[2] === ''dd'') { return 2; } // Returning the default value as -1 return -1; } /** * This method returns the date string located at the supplied index */ function getDate(date, index) { var tokens = splitDateFormat(date); return tokens[index]; } /** * This method returns true if date1 is before date2 else return false */ function isBefore(date1, date2, format) { // Validating if date1 date is greater than the date2 date if (new Date(getYear(date1, getYearIndex(format)), getMonth(date1, getMonthIndex(format)) - 1, getDate(date1, getDateIndex(format))).getTime() > new Date(getYear(date2, getYearIndex(format)), getMonth(date2, getMonthIndex(format)) - 1, getDate(date2, getDateIndex(format))).getTime()) { return true; } return false; } /** * This method returns true if date1 is after date2 else return false */ function isAfter(date1, date2, format) { // Validating if date2 date is less than the date1 date if (new Date(getYear(date2, getYearIndex(format)), getMonth(date2, getMonthIndex(format)) - 1, getDate(date2, getDateIndex(format))).getTime() < new Date(getYear(date1, getYearIndex(format)), getMonth(date1, getMonthIndex(format)) - 1, getDate(date1, getDateIndex(format))).getTime() ) { return true; } return false; } /** * This method returns true if date1 is equals to date2 else return false */ function isEquals(date1, date2, format) { // Validating if date1 date is equals to the date2 date if (new Date(getYear(date1, getYearIndex(format)), getMonth(date1, getMonthIndex(format)) - 1, getDate(date1, getDateIndex(format))).getTime() === new Date(getYear(date2, getYearIndex(format)), getMonth(date2, getMonthIndex(format)) - 1, getDate(date2, getDateIndex(format))).getTime()) { return true; } return false; } /** * This method validates and returns true if the supplied date is * equals to the current date. */ function isCurrentDate(date, format) { // Validating if the supplied date is the current date if (new Date(getYear(date, getYearIndex(format)), getMonth(date, getMonthIndex(format)) - 1, getDate(date, getDateIndex(format))).getTime() === new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()).getTime()) { return true; } return false; } /** * This method validates and returns true if the supplied date value * is before the current date. */ function isBeforeCurrentDate(date, format) { // Validating if the supplied date is before the current date if (new Date(getYear(date, getYearIndex(format)), getMonth(date, getMonthIndex(format)) - 1, getDate(date, getDateIndex(format))).getTime() < new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()).getTime()) { return true; } return false; } /** * This method validates and returns true if the supplied date value * is after the current date. */ function isAfterCurrentDate(date, format) { // Validating if the supplied date is before the current date if (new Date(getYear(date, getYearIndex(format)), getMonth(date, getMonthIndex(format)) - 1, getDate(date, getDateIndex(format))).getTime() > new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()).getTime()) { return true; } return false; } /** * This method splits the supplied date OR format based * on non alpha numeric characters in the supplied string. */ function splitDateFormat(dateFormat) { // Spliting the supplied string based on non characters return dateFormat.split(//W/); } /* * This method validates if the supplied value is a valid date. */ function isDate(date, format) { // Validating if the supplied date string is valid and not a NaN (Not a Number) if (!isNaN(new Date(getYear(date, getYearIndex(format)), getMonth(date, getMonthIndex(format)) - 1, getDate(date, getDateIndex(format))))) { return true; } return false; }

Debajo está el fragmento de HTML

<input type="text" name="start" id="start" size="10" value="05/31/2016" /> <br/> <input type="text" name="end" id="end" size="10" value="04/28/2016" /> <br/> <input type="button" value="Submit" onclick="javascript:validate(''MM/dd/yyyy'');" />


Puede simplificarlo un poco cambiando las primeras dos líneas de la función a esto:

var matches = this.match(/^([0-9]{2})//([0-9]{2})//([0-9]{4})$/);

O bien, simplemente cambie el parámetro al constructor RegExp para que sea

^([0-9]{2})//([0-9]{2})//([0-9]{4})$


Si su fecha necesita coincidir con DD.MM.YYYY y usar AngularJS, use el siguiente código:

$scope.validDate = function(value){ var matches = /^(/d{1,2})[.](/d{1,2})[.](/d{4})$/.exec(value); if (matches == null) return false; var d = matches[1]; var m = matches[2] - 1; var y = matches[3]; var composedDate = new Date(y, m, d); return composedDate.getDate() == d && composedDate.getMonth() == m && composedDate.getFullYear() == y; }; console.log($scope.validDate(''22.04.2001'')); console.log($scope.validDate(''03.10.2001'')); console.log($scope.validDate(''30.02.2001'')); console.log($scope.validDate(''23.09.2016'')); console.log($scope.validDate(''29.02.2016'')); console.log($scope.validDate(''31.02.2016''));

Puede encontrar más información sobre el objeto de alcance here . Sin AngularJS, simplemente cambie la primera línea a:

ValidDate = new function(value) {

Y llámalo usando:

var MyDate= ValidDate(''29.09.2016'');


Uso esta expresión regular para validar MM-DD-YYYY:

function isValidDate(subject){ if (subject.match(/^(?:(0[1-9]|1[012])[/- //.](0[1-9]|[12][0-9]|3[01])[/- //.](19|20)[0-9]{2})$/)){ return true; }else{ return false; } }

Solo coincidirá con los meses válidos y puede usar / - o. como separadores.


Yo usaría Moment.js para esta tarea. Hace que sea muy fácil analizar las fechas y también proporciona soporte para detectar una fecha inválida 1 en el formato correcto. Por ejemplo, considere este ejemplo :

var formats = [''MM-DD-YYYY'', ''MM/DD/YYYY''] moment(''11/28/1981'', formats).isValid() // true moment(''2-29-2003'', formats).isValid() // false (not leap year) moment(''2-29-2004'', formats).isValid() // true (leap year)

El primer moment(.., formats) se usa para analizar la entrada de acuerdo con el formato localizado suministrado. A continuación, se isValid función isValid en el objeto de momento resultante para que podamos saber realmente si es una fecha válida .

Esto se puede usar para derivar trivialmente el método isValidDate:

String.prototype.isValidDate = function() { var formats = [''MM-DD-YYYY'', ''MM/DD/YYYY'']; return moment("" + this, formats).isValid(); }

1 Como puedo encontrar escasos comentarios sobre el asunto, solo usaría moment.js para las fechas cubiertas por el calendario gregoriano . Puede haber complementos para otros calendarios (incluidos históricos o científicos).


pase esta función a la fecha con el formato // 10-10-2012 y la identificación del objeto.

function isValidDateFormat(date, id) { var todayDate = new Date(); var matches = /^(/d{2})[-//](/d{2})[-//](/d{4})$/.exec(date); if (matches == null) { if(date != ''__-__-____'') { alert(''Please enter valid date''); } } else { var day = 31; var month = 12; var b_date = date.split("-"); if(b_date[0] <= day) { if(b_date[1] <= month) { if(b_date[2] >= 1900 && b_date[2] <= todayDate.getFullYear()) { return true; } else { $("#"+id).val(''''); alert(''Please enter valid Year''); } } else { $("#"+id).val(''''); alert(''Please enter valid Month''); } } else { alert(''Please enter valid Day''); $("#"+id).val(''''); } } }


prueba esto:

function validateDate(dates){ re = /^(/d{1,2})//(/d{1,2})//(/d{4})$/; var days=new Array(31,28,31,30,31,30,31,31,30,31,30,31); if(regs = dates.match(re)) { // day value between 1 and 31 if(regs[1] < 1 || regs[1] > 31) { return false; } // month value between 1 and 12 if(regs[2] < 1 || regs[2] > 12) { return false; } var maxday=days[regs[2]-1]; if(regs[2]==2){ if(regs[3]%4==0){ maxday=maxday+1; } } if(regs[1]>maxday){ return false; } return true; }else{ return false; } }


<!DOCTYPE html> <html> <head> <title></title> <script> function dateCheck(inputText) { debugger; var dateFormat = /^(0?[1-9]|[12][0-9]|3[01])[///-](0?[1-9]|1[012])[///-]/d{4}$/; var flag = 1; if (inputText.value.match(dateFormat)) { document.myForm.dateInput.focus(); var inputFormat1 = inputText.value.split(''/''); var inputFormat2 = inputText.value.split(''-''); linputFormat1 = inputFormat1.length; linputFormat2 = inputFormat2.length; if (linputFormat1 > 1) { var pdate = inputText.value.split(''/''); } else if (linputFormat2 > 1) { var pdate = inputText.value.split(''-''); } var date = parseInt(pdate[0]); var month = parseInt(pdate[1]); var year = parseInt(pdate[2]); var ListofDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; if (month == 1 || month > 2) { if (date > ListofDays[month - 1]) { alert("Invalid date format!"); return false; } } if (month == 2) { var leapYear = false; if ((!(year % 4) && year % 100) || !(year % 400)) { leapYear = true; } if ((leapYear == false) && (date >= 29)) { alert("Invalid date format!"); return false; } if ((leapYear == true) && (date > 29)) { alert("Invalid date format!"); return false; } } if (flag == 1) { alert("Valid Date"); } } else { alert("Invalid date format!"); document.myForm.dateInput.focus(); return false; } } function restrictCharacters(evt) { evt = (evt) ? evt : window.event; var charCode = (evt.which) ? evt.which : evt.keyCode; if (((charCode >= ''48'') && (charCode <= ''57'')) || (charCode == ''47'')) { return true; } else { return false; } } </script> </head> <body> <div> <form name="myForm" action="#"> <table> <tr> <td>Enter Date</td> <td><input type="text" onkeypress="return restrictCharacters(event);" name="dateInput"/></td> <td></td> <td><span id="span2"></span></td> </tr> <tr> <td></td> <td><input type="button" name="submit" value="Submit" onclick="dateCheck(document.myForm.dateInput)" /></td> </tr> </table> </form> </div> </body> </html>


<script language = "Javascript"> // Declaring valid date character, minimum year and maximum year var dtCh= "/"; var minYear=1900; var maxYear=2100; function isInteger(s){ var i; for (i = 0; i < s.length; i++){ // Check that current character is number. var c = s.charAt(i); if (((c < "0") || (c > "9"))) return false; } // All characters are numbers. return true; } function stripCharsInBag(s, bag){ var i; var returnString = ""; // Search through string''s characters one by one. // If character is not in bag, append to returnString. for (i = 0; i < s.length; i++){ var c = s.charAt(i); if (bag.indexOf(c) == -1) returnString += c; } return returnString; } function daysInFebruary (year){ // February has 29 days in any year evenly divisible by four, // EXCEPT for centurial years which are not also divisible by 400. return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 ); } function DaysArray(n) { for (var i = 1; i <= n; i++) { this[i] = 31 if (i==4 || i==6 || i==9 || i==11) {this[i] = 30} if (i==2) {this[i] = 29} } return this } function isDate(dtStr){ var daysInMonth = DaysArray(12) var pos1=dtStr.indexOf(dtCh) var pos2=dtStr.indexOf(dtCh,pos1+1) var strDay=dtStr.substring(0,pos1) var strMonth=dtStr.substring(pos1+1,pos2) var strYear=dtStr.substring(pos2+1) strYr=strYear if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1) if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1) for (var i = 1; i <= 3; i++) { if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1) } month=parseInt(strMonth) day=parseInt(strDay) year=parseInt(strYr) if (pos1==-1 || pos2==-1){ alert("The date format should be : dd/mm/yyyy") return false } if (strMonth.length<1 || month<1 || month>12){ alert("Please enter a valid month") return false } if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){ alert("Please enter a valid day") return false } if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){ alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear) return false } if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){ alert("Please enter a valid date") return false } return true } function ValidateForm(){ var dt=document.frmSample.txtDateenter code here if (isDate(dt.value)==false){ dt.focus() return false } return true } </script>


function isValidDate(date) { var matches = /^(/d{1,2})[-//](/d{1,2})[-//](/d{4})$/.exec(date); if (matches == null) return false; var d = matches[2]; var m = matches[1] - 1; var y = matches[3]; var composedDate = new Date(y, m, d); return composedDate.getDate() == d && composedDate.getMonth() == m && composedDate.getFullYear() == y; } console.log(isValidDate(''10-12-1961'')); console.log(isValidDate(''12/11/1961'')); console.log(isValidDate(''02-11-1961'')); console.log(isValidDate(''12/01/1961'')); console.log(isValidDate(''13-11-1961'')); console.log(isValidDate(''11-31-1961'')); console.log(isValidDate(''11-31-1061''));

Funciona. (Probado con Firebug, de ahí el console.log ()).


function isValidDate(date) { var valid = true; date = date.replace(''/-/g'', ''''); var month = parseInt(date.substring(0, 2),10); var day = parseInt(date.substring(2, 4),10); var year = parseInt(date.substring(4, 8),10); if(isNaN(month) || isNaN(day) || isNaN(year)) return false; if((month < 1) || (month > 12)) valid = false; else if((day < 1) || (day > 31)) valid = false; else if(((month == 4) || (month == 6) || (month == 9) || (month == 11)) && (day > 30)) valid = false; else if((month == 2) && (((year % 400) == 0) || ((year % 4) == 0)) && ((year % 100) != 0) && (day > 29)) valid = false; else if((month == 2) && ((year % 100) == 0) && (day > 29)) valid = false; else if((month == 2) && (day > 28)) valid = false; return valid; }

Esto verifica los días válidos de cada mes y los días bisiestos válidos.


if (document.getElementById(''expiryDay'').value != test(match("/^([0-9]{2})//([0-9]{2})$/"))){ alert("Enter the date in two digit month flowed by two digits year /n"); }