使用JavaScript RegEx验证am和pm的时间

时间:2013-09-10 09:35:19

标签: javascript regex

我对正则表达式不太满意。我有以下时间:12:00am

我需要一个尊重这种格式的Javascript正则表达式:hh:mm[am/pm]

var regex = /^(\d\d):(\d\d)\s?(?:AM|PM)?$/;

4 个答案:

答案 0 :(得分:8)

你差不多完成了,缺少的部分是几十小时,小时数从不大于1,分钟小于5。我还在最后添加了“忽略大小写”标志,接受“am”,“AM”,“Am”,“aM”:

var regex = /^([0-1]\d):([0-5]\d)\s?(?:AM|PM)?$/i;

更严格一些(1≤小时≤12):

/^([1-9]|1[0-2]):([0-5]\d)\s?(AM|PM)?$/i

Doc:http://www.javascriptkit.com/javatutors/redev.shtml

答案 1 :(得分:4)

以下RegEx应该有效。 Demo Fiddle

var regex = /^([0]\d|[1][0-2]):([0-5]\d)\s?(?:AM|PM)$/i;
/* The below lines are just for demo testing purpose */
var timeStr = ["13:59am","11:59AM","09:69PM", "09:24pm", "09:99pm", "15:23bm", "09:23 AM", "14:74 PM"];
for (i=0; i<timeStr.length; i++)
    console.log("Time String: "+timeStr[i]+ " Result: " +regex.test(timeStr[i]));

RegEx说明:

([0]\d|[1][0-2]) - 小时。 0后跟任何单个数字(或)1后跟0-2之间的任何单个数字(即0或1或2)。这是为了确保像13或14等小时值被视为无效(因为我们在AM / PM格式中使用时间,小时值应该最多只有12)。

([0-5]\d) - 分钟。 0-5之间的任何单个数字后跟0-9之间的另一个数字。这是为了确保像64,79等分钟值被视为无效。

\s? - 0或1个空格

(?:AM|PM)$/i - 不区分大小写的AM或PM(即am | pm | Am | Pm | aM | pM | AM | PM

控制台输出:

Time String: 13:59am Result: false
Time String: 11:59AM Result: true
Time String: 09:69PM Result: false
Time String: 09:24pm Result: true
Time String: 09:99pm Result: false
Time String: 15:23bm Result: false
Time String: 09:23 AM Result: true
Time String: 14:74 PM Result: false  

答案 2 :(得分:1)

以下作品我使用RegExr进行了测试 http://www.regexr.com/3btsp

/^([0]?[1-9]|1[0-2]):([0-5]\d)\s?(AM|PM)$/i

答案 3 :(得分:0)

^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$