需要在Javascript中验证MM/dd/yyyy hh:MM tt

需要在Javascript中验证MM/dd/yyyy hh:MM tt,javascript,validation,Javascript,Validation,我需要验证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']); //

我需要验证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库是错误的?如果有任何帮助,我将不胜感激,我的头撞在墙上已经有两个多小时了。

您需要确认这是一个实际的日期,还是只验证它遵循了确切的格式?如果只是格式,可以使用以下正则表达式:

/[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
}

您是否需要验证它是否为实际日期,或者只是验证它是否遵循确切的格式?如果只是格式,可以使用以下正则表达式:

/[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
}
更严格的正则表达式:

/[01]\d\/[0-3]\d\/\d{4} [01]\d:[0-5]\d [AP]M/
更严格的正则表达式:

/[01]\d\/[0-3]\d\/\d{4} [01]\d:[0-5]\d [AP]M/

请尝试将此正则表达式的格式设置为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)

请尝试将此正则表达式的格式设置为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)


简单地将第二种形式视为有效形式有什么害处吗?这不太可能意味着什么。1)不允许第二种形式的原因是什么?(如您所见,日期解析很好地解决了这个问题)2)输入来自哪里?3) 检查字符串的长度就足够了吗?这是一种日期-时间格式,在广泛的遗留应用程序中使用,用户已经习惯了这种格式。此日期在Oracle update语句中从字符串转换为日期,其日期转换不那么容易,它需要精确的格式。这并不完全相关,但请确保您没有对时区做出任何危险的假设。(因为这不包括在这个格式中。)简单地将第二种形式视为有效形式有什么害处吗?这不太可能意味着什么。1)不允许第二种形式的原因是什么?(如您所见,日期解析很好地解决了这个问题)2)输入来自哪里?3) 检查字符串的长度就足够了吗?这是一种日期-时间格式,在广泛的遗留应用程序中使用,用户已经习惯了这种格式。此日期在Oracle update语句中从字符串转换为日期,其日期转换不那么容易,它需要精确的格式。这并不完全相关,但请确保您没有对时区做出任何危险的假设。(因为此格式中没有包含此斜杠。)您需要避开斜杠。谢谢,我们在regexpal.com上进行了测试,在此处添加了js regex格式的斜杠。@同意您可以将此斜杠与现有斜杠结合使用。这将确保它具有所需的格式并且是有效的日期。如果am/pm在am/pm之外也是有效的,您可以在常规express的末尾添加
i
,使其不区分大小写。此外,还更新了一个示例,该示例使用Date.js验证日期以及匹配的正则表达式。更新了@Kiyura中更严格的正则表达式,目前在AM/PM上区分大小写。请使用
[aApP][mM]
而不是
[AP][M]
使其区分大小写。您需要避开斜杠。谢谢,我们在regexpal.com上进行了测试,在此处添加了js regex格式的斜杠。@同意您可以将此斜杠与现有斜杠结合使用。这将确保它具有所需的格式并且是有效的日期。如果am/pm在am/pm之外也是有效的,您可以在常规express的末尾添加
i
,使其不区分大小写。此外,还更新了一个示例,该示例使用Date.js验证日期以及匹配的正则表达式。更新了@Kiyura中更严格的正则表达式,目前在AM/PM上区分大小写。使用
[aApP][mM]
而不是
[AP][M]
使其区分大小写。有人在另一个答案中提到不区分大小写;你可以把[AP]改为[APap],把M改为[Mm]。哈,我能说什么呢,我从最好的人那里偷东西?有人在另一个答案中提到了案件不敏感;你可以将[AP]改为[APap],将[M]改为[Mm]。哈,我能说什么,我从最好的人那里偷东西?