我需要使用 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[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
,因此请将其从模式的开头移除。
关于JavaScript 正则表达式由 ( : ) individual max min calculation 分隔的两个字符串数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54376201/