正则表达式只允许x整数?

时间:2016-05-18 20:57:36

标签: javascript regex

我有一些看起来像这样的日期:

  

20160517124945-0600

     

20160322134822.410-0500

     

20160322134822-0500

我使用RegexMagic来查找此正则表达式:

(?:[0-9]+){14}\.?(?:[0-9]+){0,3}-(?:[0-9]+){4}

问题是它还接受这样的事情:

  

20160322134822-05800

  

20160323542352352352134822-0500

显然{}并不代表我的想法。如何确保我只能在-(或可选.)之前输入14位数字,之后输入4位?

4 个答案:

答案 0 :(得分:2)

请注意,您的正则表达式无法按预期运行,因为(?:[0-9]+){0,3}表示匹配1个或更多个数字0,1,2或3次。这意味着,它匹配任意数量的数字。

您似乎需要.的可选组,后跟1位数字,您需要将+替换为限制量词:

^\d{14}(?:\.\d+)?-\d{4}$

请参阅regex demo.

<强>解释

  • ^ - 字符串的开头(我们需要确保我们只匹配.-之前的14个第一位数字)
  • \d{14} - 14位
  • (?:\.\d+)? - 1个或0个. + 1个或更多个数字
  • 的序列
  • - - 连字符
  • \d{4} - 4位数
  • $ - 字符串结尾

var re = /^\d{14}(?:\.\d+)?-\d{4}$/; 
var strs = ['20160517124945-0600', '20160322134822.410-0500', '20160322134822-0500', '20160322134822-05800','20160323542352352352134822-0500'];
for (var s of strs) {
   document.body.innerHTML += s + ": " + re.test(s) + "<br/>";
}

答案 1 :(得分:1)

尝试:

^(\d{14})(\.\d{0,3})?-(\d{4})$

答案 2 :(得分:1)

这是我的版本:

^[0-9]{14}(\.[0-9]{1,3})?-[0-9]{4}$

出于某种原因,我总是喜欢使用[0-9]而不是\ d

  • 所以我们用:^
  • 来完成字符串的开头
  • 然后是14个数字0-9
  • 然后是一个以句号开头,然后最多三个数字的可选组(我假设一段时间,然后没有数字,不会被接受。这与你发布的相反)
  • 连字符
  • 四个数字
  • 然后是字符串的结尾:$

答案 3 :(得分:0)

我想你可以像这样简化你的正则表达式:

^(\d{14})(\.\d{3})?(-\d{4})$

测试https://regex101.com/r/lF9gX0/1