正则表达式的浮点?
我正在尝试编写一个RegEx来validation浮点数。 这是我迄今为止所管理的内容:
/^[-+]?[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
正如我在评论中所说 – 你的第一个非零数字将计数,然后你再添加两个 – 现在将允许三位数字,如915
。 要解决这个问题,请使用regexp方法( 使用您的测试用例 ):
^[+-]?(?:(?!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)
要差得多; 如果你真的需要它们,请使用正则表达式。
如何使用Float(number)
(捕获exception以检测解析错误)然后validation浮点数? 对于一些属性来说,这比编写正则表达式更容易。 如果您需要强制使用Ruby接受的语法子集(为什么?),请仅检查具有正则表达式的部分。
这是一个关于在正则表达式中validation浮点数的整个网页: http : //www.regular-expressions.info/floatingpoint.html
那说,
-
{1,1}
相当于{1}
,相当于没有放置它,所以你可以删除它 - 如果你想确保
0.5xyz
没有通过,那么最后添加一个$
通过上述更改,它看起来像这样:/ /^[-+]?[1-9]\d{0,2}(\.\d)?$/
根据你的有效和无效的例子:正则表达式浮点?
这个正则表达式会起作用:
^[+-]?([1-9][0-9]?|0)(\.[05])?$
/^[-+]?\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