亲爱的正义之神(http://xkcd.com/208/),
请提供一个匹配最多4个小数位的十进制数字的模式(我在下面列出了可接受的示例),尽管有一些额外的条件(列在底部)。
可接受:
0
0.1
0.12
0.123
0.1234
1
1.1
...
123456789.1234
(注意:上面的最后一个例子是为了表明这个数字 big 的限制没有限制)
也可以接受负数:
-0.1
-0.12
-0.123
-0.1234
-1
-1.1
...
-123456789.1234
(注意:小负数可以得到的方式没有限制)
但是,以下数字不可接受,即:独立减号/加号,负零,带有一个或多个前导零的数字,带有前导加号的数字,以及不完整小数,例如:
-
+
-0
0123456789.1234
007
+0.1
+123456789.1234
.1234
1.
谢谢:)
答案 0 :(得分:3)
这样做:^(-?0\.\d{1,4}|-?[1-9]\d*(\.\d{1,4})?|0)$
。在这里你可以玩:https://regex101.com/r/e7ch1G/3
答案 1 :(得分:2)
您可以使用这样的正则表达式,但这将匹配您不想要的几个示例:
^-?\d+(?:.\d{1,4})?$
<强> Working demo 强>
但是,如果你想要一个更复杂的正则表达式来丢弃你列出的所有模式,那么你可以使用这样的丢弃技术:
^-0$(*SKIP)(*FAIL)|^-?0\d+(?:\.\d+)?$(*SKIP)(*FAIL)|^-?\d+(?:.\d{1,4})?$
<强> Working demo 强>
PCRE引擎支持这种正则表达式。因此,如果您不使用PCRE,则可以通过捕获组实现相同的目标,因此捕获组可以捕获您想要的内容,例如:
^-0$|^-?0\d+(?:\.\d+)?$|^(-?\d+(?:.\d{1,4})?)$
<强> Working demo 强>
答案 2 :(得分:0)
这应该这样做
^(?:-|\+)?\d+?(?:\.\d{1,4})?$
答案 3 :(得分:0)
^(-?((0|[1-9]+)\.\d{1,4}|[1-9])|0)$