正则表达式只允许 x 个整数
Regex only allow x integers?
我有一些日期看起来像这样:
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
相关文章:
- 正则表达式只允许 x 个整数
- 仅匹配正整数和正浮点值的正则表达式
- 只允许整数和十进制数字textbow jquery(不带正则表达式)
- 正则表达式以匹配不带前导零 (s) 的整数
- 正则表达式仅检查一个整数
- 正则表达式,用于将字符串中的最后一个整数与 php 和 javascript 匹配
- 正则表达式替换以空格分隔的整数
- 如何在 JavaScript 中使用正则表达式替换非整数的字符串
- 正则表达式表示 1 个或多个整数,后跟非整数
- 如何查找正则表达式的部分-整数
- 用于整数和小数(货币)的javascript正则表达式
- 如果字符串包含整数/十进制与数字匹配的正则表达式
- 正则表达式-整数检查不起作用
- 两个整数,三个小数的正则表达式(XX.XXX)
- 正则表达式只允许整数和小数,不需要精度
- 用正则表达式从字符串中提取双精度和整数
- 如何用正则表达式匹配有效整数和罗马数字
- 匹配最多9位整数的正则表达式
- 正则表达式中允许负整数
- Javascript正则表达式匹配从1-10的整数后面的短语