正则表达式验证器接受0到5范围内的十进制数0或5的数字

时间:2014-05-30 09:43:45

标签: regex

我试图编写一个正则表达式验证器来接受仅包含小数部分0或5且在0-5范围内的数字。例如:

-1          false
-.5         false
-0          false

000000      true
0.0         true
0000.       true
0           true
.50000000   true
00001.      true
01.50       true
2.00000     true
2.5000      true
03          true
03.5        true
0004        true
0004.5000   true
00005.0     true

0           true
0.5         true
1           true
1.5         true
2           true
2.5         true
3           true
3.5         true
4           true
4.5         true
5           true

1.05        false
5.5         false
10          false
20          false
30          false
40          false
50          false

无论数字前面或后面有多少0都可以有效。

我尝试过这个^[0-5]+(?:\.[05]0?)?$,但案例失败:0000..5001.5.5

非常感谢!

4 个答案:

答案 0 :(得分:5)

您可以使用

^0*(?:[0-4]?(?:\.5?0*)?|5(?:\.0*)?)$

说明:

^0*                  # allow leading 0s
    (?:              # non capturing group
        [0-4]?       # below 5: number starts with 0-4
        (?:\.5?0*)?  # optional: decimal dot, might be followed by one 5 and 0s.
    |                # or
        5(?:\.0*)?   # 5, possibly followed by 0s
    )
$

请注意,这也会验证空字符串或单个.。告诉我,如果这是一个问题,作为一个quickfix,您可以在开头添加前瞻,以检查长度和内容:(?=.)(?!\.$)

请参阅demo here

答案 1 :(得分:2)

您可以使用以下内容:

^0*5(?:\.0*)?$|^0*[1-4]?(?:\.[05]?0*)?$

Regular expression visualization

<强> Demo

答案 2 :(得分:1)

这应该可以解决问题:

^0*([0-4]?(\.[05]?0*)?|5(\.0*)?)$

http://rubular.com/r/bDM7mOHL54

答案 3 :(得分:1)

这是另一个:

^0*(([0-4]?(\.5?0*)?)|(5(\.0*)?))$

enter image description here