我一直在努力创建一个RegEx来实现以下目标:
到目前为止,我有这个:^(?:([0]{0}?\d):)?([0-5]{1}?\d)$
然而, 00 的情况似乎正在传递,它不应该,因为它不是 m:ss 格式。< / p>
答案 0 :(得分:10)
您的正则表达式 - ^(?:([0]{0}?\d):)?([0-5]{1}?\d)$
- 有一个0{0}?
,使引擎匹配0
完全为零(忽略此标记)。它还有多余的{1}
(因为[0-5]
会将0
到5
的数字恰好匹配一次)。请注意,没有理由将单个字符放入字符类(如[0]
),以后在需要调整模式时可能会导致问题。 更重要的是,您的正则表达式包含可选组(?:([0]{0}?\d):)?
,可以匹配一次或零次。因此,您的正则表达式允许输入56
。
您可以使用以下正则表达式:
/^\d:[0-5]\d$/
请参阅demo
var rx = /^\d:[0-5]\d$/;
var tests = ['0:00','1:34','156','3:67','45:55','56','4:344'];
for (var i = 0; i < tests.length; i++) {
document.getElementById('result').innerHTML += tests[i] + ": " + (rx.test(tests[i])) + "<br/>";
}
&#13;
input:valid {
color: green;
}
input:invalid {
color: red;
}
&#13;
<div id="result"/>
<input type="text" pattern="\d:[0-5]\d" /><br/>
&#13;
说明:
^
- 字符串开头\d
- 一位数:
- 冒号[0-5]
- 从0
到5
范围\d
- 一位数$
- 字符串结尾答案 1 :(得分:6)
除非我遗漏了一些东西,否则这应该很简单......
^[0-9]:[0-5][0-9]$
var regex = /^[0-9]:[0-5][0-9]$/;
var input = $('input');
input.keyup(function() {
if (regex.test(input.val()))
input.removeClass('error');
else
input.addClass('error');
});
&#13;
input.error {
color: red;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input/>
&#13;
Here is a working example,提供了完整的解释:
^ 在行的开头声明位置
[0-9] 匹配0-9以下列表中的单个字符 字符在0到9之间
:匹配字符:字面意思
[0-5] 匹配0-5单下列表中的单个字符 字符在0到5之间
[0-9] 匹配0-9以下列表中的单个字符 字符在0到9之间
$ 在一行结尾处断言
答案 2 :(得分:3)
正则表达式是:/^\d:[0-5]\d$/
["2:12", // OK
// the rest are invalid:
"2:60","09:12", "13:2", "123:1", "123:23", "123:456"].forEach(function(s){
if (s.match(/^\d:[0-5]\d$/)) {
alert(s);
}
});
只有“2.12”会被警告,其余的都会被警告,