RegEx匹配m:ss进行输入验证

时间:2016-02-09 11:36:26

标签: javascript regex

我一直在努力创建一个RegEx来实现以下目标:

  • 分钟只有一个数字(0到9);
  • 秒只有两个数字(00到59);
  • 的格式必须为 m:ss

到目前为止,我有这个:^(?:([0]{0}?\d):)?([0-5]{1}?\d)$

然而, 00 的情况似乎正在传递,它不应该,因为它不是 m:ss 格式。< / p>

3 个答案:

答案 0 :(得分:10)

您的正则表达式 - ^(?:([0]{0}?\d):)?([0-5]{1}?\d)$ - 有一个0{0}?,使引擎匹配0完全为零(忽略此标记)。它还有多余的{1}(因为[0-5]会将05的数字恰好匹配一次)。请注意,没有理由将单个字符放入字符类(如[0]),以后在需要调整模式时可能会导致问题。 更重要的是,您的正则表达式包含可选(?:([0]{0}?\d):)?,可以匹配一次或零次。因此,您的正则表达式允许输入56

您可以使用以下正则表达式:

/^\d:[0-5]\d$/

请参阅demo

&#13;
&#13;
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;
&#13;
&#13;

说明:

  • ^ - 字符串开头
  • \d - 一位数
  • : - 冒号
  • [0-5] - 从05范围
  • 的一位数字
  • \d - 一位数
  • $ - 字符串结尾

答案 1 :(得分:6)

除非我遗漏了一些东西,否则这应该很简单......

^[0-9]:[0-5][0-9]$

&#13;
&#13;
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;
&#13;
&#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”会被警告,其余的都会被警告,