正则表达式浮点?

时间:2012-02-08 01:50:31

标签: ruby regex

我正在尝试编写一个RegEx来验证浮点数。这是我迄今为止所管理的内容:

/^[-+]?[1-9]\d{0,2}(\.\d{1,1})?/

如果符合以下条件,则该号码有效:

  • 正面或负面
  • 最多2位数(数十或数百)
  • 百位数不能为0(仅1-9)
  • 比例最多为1
  • 十进制值可以是0或5,也可以不是

所以这些数字是有效的,例如:

  • 1.5
  • -1.5
  • 17.5
  • 15
  • -3
  • 30.5

这些数字无效,例如:

  • 1.57
  • 3041.5
  • 17.59
  • 915
  • -1.56
  • 05.0

5 个答案:

答案 0 :(得分:7)

如何Float(number)(捕获异常以检测解析错误)然后验证浮点数?对于几个属性来说,这比编写正则表达式更容易。如果你需要强制使用Ruby接受的语法的子集(为什么?),请仅检查具有正则表达式的那部分。

答案 1 :(得分:2)

正如我在评论中所说 - 你的第一个非零数字将被计算,然后你再添加两个 - 现在将允许三位数字,如915。要解决这个问题,请使用正则表达式(with your testcases):

^[+-]?(?:(?!0)\d{1,2}|0)(?:\.[05])?$

我使用否定前瞻(?!0)来确保第一个数字不是零,然后只需要所需的数字位数。它还允许0.5和类似的|0分离。如果您更喜欢.5,那就是:

^[+-]?(?!0)\d{,2}(?:\.[05])?$

如果您想禁止3.0(您的规则允许)并且只允许3(正如您在示例中所暗示的那样),请替换最后一部分:

^[+-]?(?:(?!0)\d{1,2}|0)(?:\.5)?$

然而,这比@ Arkku的好Float(number)更不易读;如果你真的需要它们,请使用正则表达式。

答案 2 :(得分:0)

这是关于验证正则表达式中的浮点数的整个网页:http://www.regular-expressions.info/floatingpoint.html

那就是说,

  • {1,1}相当于{1},相当于完全没有放置它,所以你可以删除它
  • 如果您想确保0.5xyz未通过,请在最后添加$

通过上述更改,它看起来像这样:/^[-+]?[1-9]\d{0,2}(\.\d)?$/

答案 3 :(得分:0)

根据您的有效和无效示例:Regex for floating point?

这个正则表达式可行:

 ^[+-]?([1-9][0-9]?|0)(\.[05])?$

答案 4 :(得分:0)

/^[-+]?\d{0,2}(\.[05])?(?!\d)$/

匹配时间:

  • 价值为正面或负面

  • 幅度小于100.范围为(-99.5 to 99.5)

  • 十进制值为.0.5或缺席(换句话说,.0.5,或缺少)

所以这些数字是有效的,例如:

1.5 -1.5 17.5 15 -3 30.5 -10.0 99.5

这些数字无效,例如:

1.57 3041.5 17.59 915 -1.56 05.0 99.6