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

Regex only allow x integers?

本文关键字:整数 正则表达式      更新时间:2023-09-26

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

20160517124945-0600

20160322134822.410-0500

20160322134822-0500

我使用正则表达式Magic找到这个正则表达式:

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

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

20160322134822-05800

20160323542352352352134822-0500

显然{}并不意味着我认为的那样。 如何确保我只能在-(或可选.(之前输入 14 位数字,在之后输入 4 位数字?

请注意

,您的正则表达式没有按预期运行,因为(?:[0-9]+){0,3}表示匹配 1 位或多个数字零、一、二或三倍。这意味着,它匹配任意数量的数字。

似乎您需要一个可选的组来表示.后跟 1+ 位数字,您需要用限制量词替换 +

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

请参阅正则表达式演示。

解释

  • ^ - 字符串的开头(我们需要确保我们只匹配 .- 之前的 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/>";
}

尝试:

^('d{14})('.'d{0,3})?-('d{4})$
这是我

的版本:

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

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

  • 所以我们用: ^
  • 然后 14 个数字 0-9
  • 然后
  • 是一个以句点开头的可选组,然后最多三个数字(我假设一个句点,然后之后没有数字是不可接受的。 这与你发布的内容形成鲜明对比(
  • 连字符
  • 四个数字
  • 然后字符串的结尾为:$

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

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

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