Как вернуть логическое значение из регулярного выражения - PullRequest
7 голосов
/ 01 февраля 2011

Я не могу понять, что я делаю здесь неправильно ...

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 ]

32 голосов
/ 01 февраля 2011

Это однострочный:

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

!! принудительно отвечает на истину / ложь, тогда вы можете назначить свою логическую переменную напрямую.

4 голосов
/ 14 апреля 2015

В качестве альтернативы вы можете использовать оператор тройного равенства (===) для класса Regexp, который используется для определения равенства при использовании синтаксиса case.

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

BEWARE

/Regexp/ === String полностью отличается от String === /Regexp/ !!!!Метод не является коммутативным.Каждый класс реализует === по-своему.Для вопроса выше, регулярное выражение должно быть слева от ===.

Для реализации Regexp вы можете увидеть больше документации по этому (начиная с Ruby 2.2.1) здесь .

2 голосов
/ 01 февраля 2011

Я думаю, что проблема где-то еще в вашей реализации. Используйте этот код для проверки:

k = 'random information'

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

=> failure
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...