JavaScript中的Regex 24小时时间验证

afdcj2ne  于 2023-08-08  发布在  Java
关注(0)|答案(3)|浏览(150)

我使用这个正则表达式来验证时间:

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,我在这里遗漏了什么?

2admgd59

2admgd591#

有两件事:

  • 2[0-4]必须是2[0-3],因为没有24:59时间。
  • 看起来你所需要的就是删除[0-1]?中的?,因为?量词意味着 *1或0次重复 *。

注意,这里不需要捕获组,因为您没有使用子匹配。建议将这些组替换为非捕获组,或者由于冗余而删除。
使用方式

/^(?:[01][0-9]|2[0-3]):[0-5][0-9](?::[0-5][0-9])?$/

字符串
参见regex demo
在您的代码段中:

var time = document.getElementById("time").value;
var isValid = /^(?:[01][0-9]|2[0-3]):[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 === '');

r8xiu3jd

r8xiu3jd2#

/^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/中,第一个?表示0-1可以出现或不出现,只需删除它,然后强制出现0或1

7xllpg7q

7xllpg7q3#

您可以使用以下正则表达式在JavaScript中以“00:00”到“23:59”的格式创建小时的正则表达式模式:

const HOURS_REGEX = /^(?:[01]\d|2[0-3]):[0-5]\d$/;

字符串
正则表达式模式的解释:

*^:字符串的开始。
*(?:...):非捕获组,用于对小时和分钟部分进行分组。
*[01]\d:匹配00到19之间的小时数。
*2[0-3]:匹配20到23之间的小时数。
*:匹配小时和分钟之间的冒号。
*[0-5]\d:匹配00到59范围内的分钟数。
*$:字符串结束。

此正则表达式将确保输入匹配格式“HH:MM”,其中HH介于0023之间,MM介于0059之间。它不会匹配无效的小时,如“24:00”,因为小时的有效范围是从0023

相关问题