Javascript – Regex для проверки формата даты

Есть ли способ иметь регулярное выражение в JavaScript, которое проверяет даты нескольких форматов, например: DD-MM-YYYY или DD.MM.YYYY или DD / MM / YYYY и т. Д.? Мне нужно все это в одном регулярном выражении, и я не очень хорош в этом. До сих пор я придумал это: var dateReg = /^\d{2}-\d{2}-\d{4}$/; для DD-MM-YYYY. Мне нужно только проверить формат даты, а не дату.

Вы можете использовать class символов ( [./-] ), чтобы разделители могли быть любым из определенных символов

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

Или, еще лучше, сопоставьте class символов для первого разделителя, затем ([./-]) это как группу ([./-]) и используйте ссылку на захваченную группу \1 чтобы соответствовать второму разделителю, что гарантирует, что оба разделителя являются одна и та же:

 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 

Формат, дни, месяцы и год:

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

Предложенное регулярное выражение не будет проверять дату, только шаблон.

Итак, 99.99.9999 передаст регулярное выражение.

Вы позже указали, что вам нужно только проверить шаблон, но я все же считаю, что более полезно создавать объект даты

 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 

Используйте скобки / ^\ /^\d{2}[.-/]\d{2}[.-/]\d{4}$/ 2 /^\d{2}[.-/]\d{2}[.-/]\d{4}$/ 2 /^\d{2}[.-/]\d{2}[.-/]\d{4}$/ 4 /^\d{2}[.-/]\d{2}[.-/]\d{4}$/ http://download.oracle.com/javase/tutorial/essential/regex /char_classes.html

Вы можете использовать регулярные множественные выражения с использованием оператора 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"); } } 

Вышеуказанная функция может проверять форматы даты YYYY-MM-DD, DD-MM-YYYY. Вы можете просто расширить регулярное выражение для проверки любого формата даты. Предположим, что вы хотите проверить YYYY / MM / DD, просто замените «[-]» на «[- | /]». Это выражение может проверять даты до 31, месяцев до 12. Но високосные годы и месяцы заканчиваются 30 днями, которые не проверяются.

Попробуй это:

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

Не заново изобретайте колесо. Используйте готовое решение для синтаксического анализа, например 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 () использует местное время, час 00:00:00 покажет последний день, когда у нас есть события «Летнее время» или «Летнее время».

Пример:

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

Другой альтернативой является использование getUTCDate ().

Чтобы убедиться, что он будет работать, вам необходимо его проверить.

 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); }; 

Если вы хотите проверить свою date(YYYY-MM-DD) вместе со сравнением, она будет использоваться для вас полностью …

  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; } 

В приведенном ниже коде можно найти подтверждение даты для любого из предоставленного формата или на основе пользовательской локали для проверки начала / от и конца / до дат. Могут быть некоторые более эффективные подходы, но они придумали это. Протестируйте его для таких форматов, как MM / dd / yyyy, dd / MM / yyyy, yyyy-MM-dd, yyyy.MM.dd, yyyy / MM / dd и dd-MM-yyyy.

Примечание: формат датированной даты и строка даты идут arm об руку.

   

Ниже приведен fragment HTML

   

  • java.lang.StackOverflowError при использовании RegEx для синтаксического анализа больших строк
  • Новые строки в sed на Mac OS X
  • Нет совпадений с c ++ 11 regex
  • Разделительная строка с разделителями разделов MySQL в таблицу Temp
  • Поиск регулярного выражения MongoDB по целочисленному значению
  • Я только что нашел ошибку в реализации Notepad ++ в lookbehind?
  • Список всех файлов, соответствующих шаблону полного пути в R
  • Как разделить разделенную запятыми строку при игнорировании пропущенных запятых?
  • Regex - не содержит определенных символов
  • Необходимо выполнить поиск подстановочных знаков (*,? И т. Д.) В строке с использованием Regex
  • RegEx для исключения конкретной строковой константы
  • Давайте будем гением компьютера.