我有一些看起来像这样的日期:
20160517124945-0600
20160322134822.410-0500
20160322134822-0500
我使用RegexMagic来查找此正则表达式:
(?:[0-9]+){14}\.?(?:[0-9]+){0,3}-(?:[0-9]+){4}
问题是它还接受这样的事情:
20160322134822-05800
或
20160323542352352352134822-0500
显然{}
并不代表我的想法。如何确保我只能在-
(或可选.
)之前输入14位数字,之后输入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
答案 3 :(得分:0)