我对以下内容有点困难:
我需要允许任何正数值最多四个小数位.这里有些例子.
允许:
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)
尝试这个:
^[0-9]*(?:\.[0-9]{0,4})?$
Run Code Online (Sandbox Code Playgroud)
说明:仅当以数字(不包括负数)开头,可选地后跟(非捕获组)一个点和 0-4 位数字时才匹配。
编辑:.2134也可以匹配此模式。要仅允许 0 < x < 1 的格式0.2134,请将第一个替换*为+上面的。