我需要使用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)变大时,它将不验证字符串。 那我做错了什么??
答案 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'))