正则表达式的浮点?

我正在尝试编写一个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