我尝试使用以下脚本验证时间值,但第二个值由于某种原因未验证。我的剧本有什么不对吗?
var timeFormat = /^([0-9]{2})\:([0-9]{2})$/g;
var time_one = '00:00';
var time_two = '15:20';
if(timeFormat.test(time_one) == false)
{
console.log('Time one is wrong');
}
else if(timeFormat.test(time_two) == false)
{
console.log('Time two is wrong');
}
以上脚本始终在我的控制台中返回时间二错误。此外,我尝试将 time_two 的值设置为'00:00',但再次无法验证。
我的正则表达式错了吗?
注意:我也试过以下正则表达式,但效果仍然相同:
var timeFormat = /(\d{2}\:\d{2})/g;
答案 0 :(得分:10)
我认为它来自“全球”标志,请尝试这样做:
var timeFormat = /^([0-9]{2})\:([0-9]{2})$/;
答案 1 :(得分:1)
test
将通过一个匹配进行全局正则表达式,并在它到达字符串末尾时回退。
var timeFormat = /^([0-9]{2})\:([0-9]{2})$/g;
var time_one = '00:00';
timeFormat.test(time_one) // => true finds 00:00
timeFormat.test(time_one) // => false no more matches
timeFormat.test(time_one) // => true restarts and finds 00:00 again
所以你需要在你的场景中丢失g
标志。
答案 2 :(得分:1)
我可以提出以下选择:
/^[01]?\d:[0-5]\d( (am|pm))?$/i // matches non-military time, e.g. 11:59 pm
/^[0-2]\d:[0-5]\d$/ // matches only military time, e.g. 23:59
/^[0-2]?\d:[0-5]\d( (am|pm))?$/i // matches either, but allows invalid values
// such as 23:59 pm
答案 3 :(得分:0)
简单
/^([01]\d|2[0-3]):?([0-5]\d)$/
输出:
12:12 -> OK
00:00 -> OK
23:59 -> OK
24:00 -> NG
12:60 -> NG
9:40 -> NG