我正在尝试编写一个RegEx来验证浮点数。这是我迄今为止所管理的内容:
/^[-+]?[1-9]\d{0,2}(\.\d{1,1})?/
如果符合以下条件,则该号码有效:
所以这些数字是有效的,例如:
这些数字无效,例如:
答案 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)
答案 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