正则表达式接受从0到100的所有小数

时间:2012-07-07 10:26:35

标签: regex

我想修改现有的正则表达式,它接受从0到99.99的小数

\d{0,2}(\.\d{1,2})?$ 

我希望这是接受

100
100.0
100.00

并且不接受

100.1
100.02
101

任何人都可以帮我修改上面的RE

6 个答案:

答案 0 :(得分:5)

我想最好使用|将100的测试添加为特殊情况:

^(\d{0,2}(\.\d{1,2})?|100(\.00?)?)$ 

答案 1 :(得分:5)

使用浮点比较

您已经有了使用正则表达式执行此操作的答案,但通常更有效地将其作为与边界条件的浮点比较来处理。例如,使用Ruby:

number = 99
number.to_f >= 0 and number.to_f <= 100
=> true

number = 100.01
number.to_f >= 0 and number.to_f <= 100
=> false

在这些示例中,变量被转换为float,以便正确比较字符串和整数,然后将float与零和100的边界条件进行比较。它快速,易于编写,并且(最重要的是) 易于阅读

您的里程可能会有所不同。

答案 2 :(得分:0)

100(\.0{1,2})?$|\d{0,2}(\.\d{1,2})?$ 

答案 3 :(得分:0)

(100(\.[0]{1,2})?|[0-9]{1,2}(\.[0-9]{1,2})?)

答案 4 :(得分:0)

我想,这会帮助你“^(100(.0 {0,2}?)?$ |([1-9] {0,1})([0-9] {1})( ([0-9] {0,2})|?(\,[0-9] {0,2})))$“

它将匹配此之间的所有内容: 0-100, 0.0 - 100.0, 0.00 - 100.00 所有这些都用逗号。

答案 5 :(得分:0)

^(0*(\d{1,2}(\.\d+)?)|\.\d+|100(\.0+$)?)$

这将适用于介于0到100之间且对大多数编程语言有效的十进制小数位

valid: 0, 0.2, .1, 0001.020, 9, 010, 100.0000
invalid: -1, 100.010, 1., ., empty