我对以下内容有点困难:
我需要允许任何正数值最多四个小数位。以下是一些例子。
允许
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})?$
然而,这似乎不起作用,例如它应该是不允许的。
非常感谢任何想法。
由于
答案 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]+)$