如何从正则表达式返回一个布尔值

时间:2011-02-01 02:55:16

标签: ruby-on-rails ruby regex

我无法弄清楚我在这里做错了什么..

if @calc.docket_num =~ /DC-000044-10/ || @calc.docket_num =~ /DC-67-09/
  @calc.lda = true
else
  @calc.lda = false
end

但似乎@calc.docket_num可以是任何字符串,它总是返回true

我不是这样做的吗?

3 个答案:

答案 0 :(得分:32)

这是一个单行:

@calc.lda = !!(@calc.docket_num =~ /DC-000044-10|DC-67-09/)

!!强制响应为true / false,然后您可以直接指定布尔变量。

答案 1 :(得分:4)

或者,您可以对Regexp类使用三等于(===)运算符,该运算符用于在使用case语法时确定相等性。

@calc.lda = /DC-000044-10|DC-67-09/ === @calc.docket_num 
@calc.lda
=> true

<强>提防

/Regexp/ === StringString === /Regexp/完全不同!!!!该方法不可交换。每个类以不同方式实现===。对于上面的问题,正则表达式必须位于===的左侧。

对于Regexp实现,您可以看到更多关于此的文档(从Ruby 2.2.1开始)here

答案 2 :(得分:2)

我认为问题出在您实施的其他地方。使用此代码进行检查:

k = 'random information'

if k =~ /DC-000044-10/ || k =~ /DC-67-09/
  puts 'success'
else
  puts 'failure'
end

=> failure