我需要在Javascript中验证特定格式的日期字符串。
格式为:MM / dd / yyyy hh:mm tt
我很难找到一个可以处理它的日期库,或者一个正在执行相同操作的正则表达式函数。
我已经尝试了Date.js,这很接近,但有以下问题:
date.parseExact('10/21/2011 06:00 AM', ['MM/dd/yyyy hh:mm tt']); //passes
date.parseExact('10/21/2011 06:00 A', ['MM/dd/yyyy hh:mm tt']); //passes
第二个不应该通过。
有没有人知道可以满足这种需求的正则表达式,或者我是否使用了Date.js库?任何帮助都会受到赞赏,我已经在2小时的大部分时间里撞到了墙上。
答案 0 :(得分:2)
您是否需要验证它是实际日期,还是仅仅遵循确切的格式?如果只是格式,你可以使用这个正则表达式:
/[0-1]\d\/[0-3]\d\/\d{4} [0-1]\d:[0-5]\d [aApP][mM]/
您可以将Date.js与上述正则表达式结合使用,以验证它是否为有效日期,并与您的确切格式相匹配。例子:
01/01/9999 01:00 AM - matches
12/31/9999 01:59 PM - matches
99/99/9999 99:99 AM - no match (day/month out of range)
12/31/9999 99:59 PM - no match (hours out of range)
01/01/9999 99:99 A - no match (no match on A)
完整的JS示例:
var re = /[0-1]\d\/[0-3]\d\/\d{4} [0-1]\d:[0-5]\d [AP][M]/; // [aApP][mM] for case insensitive AM/PM
var date = '10/21/2011 06:00 AM';
if (re.test(date) && date.parseExact(date, ['MM/dd/yyyy hh:mm tt']){
// date is exact format and valid
}
答案 1 :(得分:2)
更严格的正则表达式:
/[01]\d\/[0-3]\d\/\d{4} [01]\d:[0-5]\d [AP]M/
答案 2 :(得分:0)
请尝试使用此正则表达式格式为dd / MM / yyyy hh:mm tt
"[0-3][0-9]\/[0-1][0-9]\/[0-9]{4} [0-1][0-9]:[0-5][0-9] [paPA][Mm]"
上述表达式的格式如下
01/12/9999 01:00 AM - matches
12/31/9999 01:59 PM - no match
39/19/9999 01:59 PM - matches
39/19/9999 99:99 PM - no match (time out of range)
12/31/9999 99:59 PM - no match (hours out of range)