JavaScript regex两个字符串号,每个字符串号之间用(:)分隔,每个最大最小值计算

时间:2019-01-26 06:27:30

标签: javascript jquery regex

我需要使用Regex验证JavaScript字符串,例如“ 03:39”。遵循规则,

1。字符串的第一部分(:)允许从0到24

2。在(:)之后的字符串的第二部分允许从0到59

3。两部分的单位数可以以0开头,例如01或02,也可以以0开头,例如1,2。

现在我已经编写了下面的JavaScript正则表达式代码。

var dateRegEx = /^n(0[0-2][0-4]|[0-24])(:)(0|[0-5][0-9]|[0-59])$/;
if ($(element).val().match(dateRegEx) === null) { 
// my rest of the code
}

现在,当用户插入0:38、01:38或02:59时,它将得到验证,但是当第一部分在2之后(如03:38)变大时,它将不验证字符串。 那我做错了什么??

2 个答案:

答案 0 :(得分:1)

在数小时内,您当前的0[0-2][0-4]要求三位数字(任何数字都不能超过4),而[0-24]仅匹配一位数字(0、1、2或4)。

相反,要匹配小时数(00到24),您应该使用(?:2[0-4]|[01]?[0-9]);可以是2,后跟0到4之间的数字,也可以是(可选)0或1后跟任何其他数字。

要匹配分钟(00到59),请使用[0-5]?[0-9]-0到5之间的可选数字,然后是0到9之间的数字。

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

https://regex101.com/r/0QxX7w/1

请注意,如果您仅匹配:之类的单个字符,请勿将其放入字符集中。另外,由于您不希望在比赛开始时使用n,因此请将其从图案的开始处删除。

答案 1 :(得分:1)

好吧,我认为您不需要正则表达式,您可以直接这样做

function check(input){
  let temp = input.split(':')
  return  (0 <= temp[0] && temp[0] <=24 ) && ( 0<= temp[1] && temp[1] <=59)
}

console.log(check('03:380'))
console.log(check('03:38'))
console.log(check('30:0'))

使用正则表达式,您可以像这样

function check(input){
  return /^(?:[01]?[0-9]|[0-2][0-4]):[0-5]?[0-9]$/.test(input)
}


console.log(check('03:30'))
console.log(check('03:380'))
console.log(check('33:30'))
console.log(check('24:59'))
console.log(check('03:60'))
console.log(check('0:0'))
console.log(check('0:30'))