正则表达式 - 最多4位小数的数字验证

时间:2011-10-18 16:16:04

标签: regex

我对以下内容有点困难:

我需要允许任何正数值最多四个小数位。以下是一些例子。

允许

123
12345.4
1212.56
8778787.567
123.5678

不允许:

-1
12.12345
-12.1234

我尝试了以下内容:

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

然而,这似乎不起作用,例如它应该是不允许的。

非常感谢任何想法。

由于

6 个答案:

答案 0 :(得分:12)

要解释为什么您的尝试不适用于1000的值,我会稍微分解一下这个表达式:

^[0-9]{0,2}             # Match 0, 1, or 2 digits (can start with a zero)...
(\.[0-9]{1,4})?$        # ... optionally followed by (a decimal, then 1-4 digits)
|                       # -OR-
^(100)                  # Capture 100...
(\.[0]{1,4})?$          # ... optionally followed by (a decimal, then 1-4 ZEROS)

任何类型的4位数字都没有空间,更不用说1000(只有0-2位数字或数字100的空间)

^\d*                    # Match any number of digits (can start with a zero)
(\.\d{1,4})?$           # ...optionally followed by (a decimal and 1-4 digits)

此表达式将通过任何允许的示例并拒绝所有 Not Allowed 示例,因为您(和我)使用字符串的开头断言^

它也会传递这些数字:

.2378
1234567890
12374610237856987612364017826350947816290385
000000000000000000000.0
0

......以及一条完全空白的行 - 可能是也可能不是

要拒绝以零开头的内容,请使用:

^(?!0\d)\d*             # Match any number of digits (cannot "START" with a zero)
(\.\d{1,4})?$           # ...optionally followed by (a decimal and 1-4 digits)

此表达式(使用否定前瞻)具有以下评估:

REJECTED                Allowed
---------               -------
0000.1234               0.1234
0000                    0
010                     0.0  

您还可以通过其他方式测试完全空行,但如果您想使用正则表达式拒绝它,请使用:

^(?!0\d|$)\d*(\.\d{1,4})?$

答案 1 :(得分:3)

试试这个:

^[0-9]*(?:\.[0-9]{0,4})?$

说明:仅在以数字开头(不包括负数)时匹配,可选地后跟(非捕获组)一个点和0-4位数。

修改:此模式.2134也会匹配。仅允许0< x<格式0.2134中的1个,将第一个*替换为上面的+

答案 2 :(得分:0)

这个正则表达式可以解决这个问题:

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

从字符串的开头搜索一个或多个数字。如果有.,则必须至少跟随一位数,但最多只能为4.

答案 3 :(得分:0)

^(?<!-)\+?\d+(\.?\d{0,4})?$

将匹配的东西不以 - 开头,可能有一个+后跟一个至少有一个数字的整数部分和一个最多4个数字的可选浮动部分。

注意:正则表达式支持科学记数法。如果您也想要,请在评论中告诉我。

答案 4 :(得分:0)

如果你有一个double值,但它会转到更多的十进制格式,你想把它缩短为4呢?

   double value = 12.3457652133
  value =Double.parseDouble(new DecimalFormat("##.####").format(value));

答案 5 :(得分:0)

问得好!! 您可以尝试以下方法:

^([0-9]+[\.]?[0-9]?[0-9]?[0-9]?[0-9]?|[0-9]+)$
相关问题