我正在努力确保人们输入的格式正是这样:
.match(/\d{1,2}:\d\d\s((AM)|(PM))/)
意味着用户可以写:
12:30 AM
2:30 PM
但不是:
1:2 A
1:30
PM
它必须是前两位数,后跟冒号,而不是两位数,一个空格,以及AM或PM。但我的正则表达式不是那样的。我错过了什么?
答案 0 :(得分:6)
究竟是什么问题?
> "1:2 A".match(/\d{1,2}:\d\d\s((AM)|(PM))/);
null
>"12:30 AM".match(/\d{1,2}:\d\d\s((AM)|(PM))/);
["12:30 AM", "AM", "AM", undefined]
然而:
您需要将表达式置于字符串的开头(^
)和结尾($
);否则
> "foo 12:30 AM foo".match(/\d{1,2}:\d\d\s((AM)|(PM))/);
["12:30 AM", "AM", "AM", undefined]
请改为RegExp.test()
,它会返回一个更简单的true
/ false
而非数组。
> /^\d{1,2}:\d\d\s((AM)|(PM))$/.test("12:30 AM");
true
执行相同操作的简单表达式可以是/^\d{1,2}:\d{2} [AP]M$/
答案 1 :(得分:4)
假设您在单行输入字段上检查它(而不是在文本区域内搜索),您应该这样做:
/^\d{1,2}:\d\d\s[AP]M$/
答案 2 :(得分:3)
这样的事情怎么样:
.match(/([0]?[1-9]|1[0-2])(:)[0-5][0-9]?( )?(AM|PM)/)
答案 3 :(得分:1)
如果您的问题是新行字符。 你可以尝试:
'12:30
AM'.replace(/\n/, '').match(/\d{1,2}:\d\d\s((AM)|(PM))/)
答案 4 :(得分:1)
我已经在http://www.regular-expressions.info/javascriptexample.html中尝试了您的代码,但它确实有效。
顺便说一句,您还需要测试时间是否有效。你的代码现在可以接受像上午99:12这样的事情,好像它们是正确的。我建议你使用这样的东西。
\b(1[0-2]|\d):[0-5][0-9]\s([aApP][mM])\b
=)
答案 5 :(得分:1)
结合Matt,c0deNinja和我自己的想法,你应该最终得到:
/^(0?[1-9]|1[0-2]):[0-5][0-9]\s?[AP]M$/.test(input);
答案 6 :(得分:1)
你的正则表达式似乎是正确的。结合上面的一些想法,你可以用Regex测试你的字符串:
^(1[0-2]|\d):[0-5]\d [aApP][mM]$
Javascript中的测试代码:
var regex = /^(1[0-2]|\d):[0-5]\d [aApP][mM]$/g;
var input = "2:30 PM";
if(regex.test(input)) {
var matches = input.match(regex);
for(var match in matches) {
alert(matches[match]);
}
} else {
alert("No matches found!");
}