正则表达式不匹配负整数

时间:2015-08-22 01:47:21

标签: ruby-on-rails ruby regex

我查询了我的Payment模型。我的amount列是一个整数。我想从amount列中消除负整数。我只想用正值显示付款。

Payment.where('amount NOT REGEXP ?', '^-\d+$')

Payment.where('amount NOT REGEXP ?', '^-\d*\.?\d+$'

都在Rubular中工作,但在我的Rails应用程序中不起作用。我尝试在控制台中进行匹配,但它也不起作用:

amount.to_i =~ /^-\d*\.?\d+$/

我知道>= 0条件会起作用,但我想知道为什么它不适用于REGEX

2 个答案:

答案 0 :(得分:3)

如果你只是想删除负整数,那么这样的东西不会同样有效吗,而且性能更高吗?

Payment.where('amount >= 0')

答案 1 :(得分:0)

我认为你的正则表达式在控制台中运行。

$ irb
irb(main):001:0> /^-\d*\.?\d+$/ =~ "-3"
=> 0
irb(main):002:0> $~
=> #<MatchData "-3">
irb(main):003:0> /^-\d*\.?\d+$/ =~ "-3.1415"
=> 0
irb(main):004:0> $~
=> #<MatchData "-3.1415">
irb(main):005:0> /^-\d*\.?\d+$/ =~ "128"
=> nil
irb(main):006:0>