^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]+\.[0-9]*[1-9][0-9]*)$
我不太了解正则表达。 上面的正则表达式不允许输入.2。但它允许所有其他小数,如0.2,0.02等。我需要让这个表达式允许数字,如.2,.06等......
答案 0 :(得分:10)
只需将+
之后的[0]
更改为ansterisk` *“:
^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]*\.[0-9]*[1-9][0-9]*)$
因此,不要在点之前允许一个或多个零,只允许0或更多。
答案 1 :(得分:8)
我喜欢这个浮点数的正则表达式,它非常聪明,因为它不会将0.0
与数字匹配。它要求在期间的任何一侧至少有一个非零数字。想想我会把它分解成各个部分,以便更深入地理解它。
^ #Match at start of string
( #start capture group
[0-9]* # 0-9, zero or more times
[1-9] # 1-9
[0-9]* # 0-9, zero or more times
( #start capture group
\. # literal .
[0-9]+ # 0-9, one or more times
)? #end group - make it optional
| #OR - If the first option didn't match, try alternate
[0]+ # 0, one or more times ( change this to 0* for zero or more times )
\. # literal .
[0-9]* # 0-9, zero or more times
[1-9] # 1-9
[0-9]* # 0-9, zero or more times
) #end capture group
$ #match end of string
正则表达式在其中有两个较小的模式,第一个匹配数字> = 1的情况(具有至少一个非零字符。)可选地允许具有一个或多个尾随数字的句点。第二个匹配< 1.0并确保点右侧至少有一个非零数字。
Johannes的回答已经为您提供了问题的[0]*
解决方案。
一些正则表达式快捷方式,您可以在大多数正则表达式风格中用[0-9]
替换\d
的任何实例。此外[0]
仅匹配0
,因此您也可以使用0*
代替[0]*
。最终的正则表达式:
/^(\d*[1-9]\d*(\.\d+)?|0*\.\d*[1-9]\d*)$/
答案 2 :(得分:2)
我会用这个:
^(?:(?:0|[1-9][0-9]*)(?:\.[0-9]*)?|\.[0-9]+)$
这允许以
开头的数字表达式允许:
123
123.
123.45
.12345
但不是:
.
01234
答案 3 :(得分:1)
您也可以使用简单的表达式:
^[-+]?\d*(\.\d+)?$
答案 4 :(得分:0)
将其替换为:
^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]*\.[0-9]*[1-9][0-9]*)$
甚至更短:
^(\d*[1-9]\d*(\.\d+)?|[0]*\.\d*[1-9]\d*)$