我对正则表达式不太满意。我有以下时间:12:00am
。
我需要一个尊重这种格式的Javascript正则表达式:hh:mm[am/pm]
var regex = /^(\d\d):(\d\d)\s?(?:AM|PM)?$/;
答案 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
答案 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]$