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

Ria*_*ney 1 regex

我对以下内容有点困难:

我需要允许任何正数值最多四个小数位.这里有些例子.

允许:

123
12345.4
1212.56
8778787.567
123.5678
Run Code Online (Sandbox Code Playgroud)

不允许:

-1
12.12345
-12.1234
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

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

然而,这似乎不起作用,例如,当它应该是1000时是不允许的.

任何想法将不胜感激.

谢谢

Cod*_*key 13

为了解释为什么你的尝试不适用于某个值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)
Run Code Online (Sandbox Code Playgroud)

任何类型的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)
Run Code Online (Sandbox Code Playgroud)

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

它也会传递这些数字:

.2378
1234567890
12374610237856987612364017826350947816290385
000000000000000000000.0
0
Run Code Online (Sandbox Code Playgroud)

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

要使它拒绝以零开头的东西,请使用:

^(?!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)
Run Code Online (Sandbox Code Playgroud)

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

REJECTED                Allowed
---------               -------
0000.1234               0.1234
0000                    0
010                     0.0  
Run Code Online (Sandbox Code Playgroud)

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

^(?!0\d|$)\d*(\.\d{1,4})?$
Run Code Online (Sandbox Code Playgroud)


pop*_*tea 5

尝试这个:

^[0-9]*(?:\.[0-9]{0,4})?$
Run Code Online (Sandbox Code Playgroud)

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

编辑:.2134也可以匹配此模式。要仅允许 0 < x < 1 的格式0.2134,请将第一个替换*为+上面的。