2015-05-19 3 views
-1

Я не испытываю регулярное выражение в JavaScript. Могу ли я иметь регулярное выражение для даты? Он должен быть в формате «mm/dd/yyyy hh: mm AM/PM». Кроме того, каждый месяц может принимать только 28/30/31 дней. Если год - високосный год (год делится на 4), то 2/29 могут быть приняты.Регулярное выражение для mm/dd/yyyy hh: mm AM/PM

+1

Это похоже на [дубликат] (http://stackoverflow.com/questions/12717638/need-to-validate-mm-dd-yyyy-hhmm-tt-in-javascript?rq=1). Есть ли что-то, что другие вопросы и ответы не обеспечивают, что вам нужно? – Shaz

+0

Вы можете использовать это для большей части своей проблемы - http://stackoverflow.com/questions/8647893/regular-expression-leap-years-and-more - Если это не для домашнего задания или академического любопытства, рассмотрите используя 'moment.js' –

ответ

3

Хотя это, вероятно, можно было бы сделать с регулярным выражением, он стал бы сложным и нечитаемым, и лично я не думаю, что это было бы лучшим решением здесь. Високосный год более сложный, чем «делится на 4», например. 1900 было не leap year и ни воли 2100 ...

Я хотел бы работать с моей любимой датой инструментов в расслоении плотного вашего случая, moment.js

Код будет выглядеть примерно так:

moment(myDate, 'M/D/YYYY h:mm a').isValid(); 

Примечания этот момент.js предоставляет массу других, очень полезных функций. Например, вы можете указать дату на отметку времени перед отправкой ее на ваш сервер или даже выполнить расчеты с вашими датами, если это было бы желательно. Просто взгляните на документы, я обещаю вам, что вам понравится этот набор инструментов!

+0

Большое спасибо за помощь! – qazwsxedcrfvtgbyhnujmikolp

+0

Просто, чтобы уточнить (и оказать некоторую поддержку вашему аргументу, что високосные годы слишком сложны для обработки в регулярных выражениях): 2000 фактически _was_ високосный год. Правило состоит в том, что годы, равномерно делящиеся на 4, являются високосными годами, кроме того, что они не являются високосными годами, когда они равномерно делятся на 100, кроме того, что они остаются летальными годами, если они равномерно делятся на 400. С 2000 года равномерно делится на 400, это _ был високосный год - но 1900 не было, а 2100 не будет. –

+0

@JoeDeRose вы абсолютно правы, моя ошибка. Моя точка остается действительной, хотя, как вы, вероятно, согласны. Обновит мой ответ! – Pevara

-1
/[0-1]\d\/[0-3]\d\/\d{4} [0-1]\d:[0-5]\d [aApP][mM]/ 
+1

немного, так как он примет недопустимые даты, такие как' 19/39/9999 19:00 AM' – Pevara

Смежные вопросы