具有格式条件的负数的正则表达式小数

时间:2016-12-15 15:37:36

标签: regex decimal negative-number

亲爱的正义之神(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.

谢谢:)

4 个答案:

答案 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

enter image description here

答案 2 :(得分:0)

这应该这样做

^(?:-|\+)?\d+?(?:\.\d{1,4})?$

答案 3 :(得分:0)

^(-?((0|[1-9]+)\.\d{1,4}|[1-9])|0)$

https://regex101.com/r/xla5Wp/1