我使用这个正则表达式来验证时间:
var time = document.getElementById("time").value;
var isValid = /^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/.test(time);
if (isValid === false) {
errors += '- ' + ' Invalid Time Input.\n';
}
if (errors)
alert('The following error(s) occurred:\n' + errors);
document.MM_returnValue = (errors === '');
字符串
虽然这在大多数情况下都有效,但可以接受9:50
等输入。我需要强制这样的用户被迫输入领先的0
在时间小于10。也就是说,有效时间应该是09:50
,我在这里遗漏了什么?
3条答案
按热度按时间2admgd591#
有两件事:
2[0-4]
必须是2[0-3]
,因为没有24:59
时间。[0-1]?
中的?
,因为?
量词意味着 *1或0次重复 *。注意,这里不需要捕获组,因为您没有使用子匹配。建议将这些组替换为非捕获组,或者由于冗余而删除。
使用方式
字符串
参见regex demo
在您的代码段中:
型
r8xiu3jd2#
在
/^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/
中,第一个?
表示0-1
可以出现或不出现,只需删除它,然后强制出现0或17xllpg7q3#
您可以使用以下正则表达式在JavaScript中以“00:00”到“23:59”的格式创建小时的正则表达式模式:
字符串
正则表达式模式的解释:
*^:字符串的开始。
*(?:...):非捕获组,用于对小时和分钟部分进行分组。
*[01]\d:匹配00到19之间的小时数。
*2[0-3]:匹配20到23之间的小时数。
*::匹配小时和分钟之间的冒号。
*[0-5]\d:匹配00到59范围内的分钟数。
*$:字符串结束。
此正则表达式将确保输入匹配格式“HH:MM”,其中HH介于00和23之间,MM介于00和59之间。它不会匹配无效的小时,如“24:00”,因为小时的有效范围是从00到23。