3

我尝试使用以下脚本验证时间值,但第二个值由于某种原因无法验证。我的脚本有什么问题吗?

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;
4

4 回答 4

11

我认为它来自“全球”标志,试试这个:

var timeFormat = /^([0-9]{2})\:([0-9]{2})$/;
于 2013-09-11T08:27:21.937 回答
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在你的场景中失去标志。

于 2013-09-11T08:29:12.237 回答
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
于 2014-03-26T22:34:41.560 回答
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

演示:https ://regexr.com/40vuj

于 2018-10-10T12:36:48.520 回答