Подтвердить что ты не робот

Как определить, есть ли соответствие true или false в рельсах?

Я хочу создать тест, который возвращает true или false для обработки электронной почты.

В настоящее время, если адрес электронной почты начинается с r +, тогда он true, иначе он будет false. Это поможет нашему серверу игнорировать многие проблемы, с которыми мы сталкиваемся.

Примеры:

[email protected] .. true
[email protected] .. true
[email protected] .. FALSE

Какой самый эффективный способ справиться с Rails/ruby ​​/regex?

Спасибо

ЗАДАЧА

Это один вкладыш в рельсах/рубине с:

ABORT if XXXXX == 0
4b9b3361

Ответ 1

Это будет соответствовать:

/^r\+.*@site.com$/

Примеры:

>> '[email protected]' =~ /^r\+.*@site.com$/ #=> 0
>> '[email protected]' =~ /^r\+.*@site.com$/ #=> nil

Так как все, что не является nil или false правдой в Ruby, вы можете использовать это регулярное выражение в состоянии. Если вы действительно хотите логическое, вы можете использовать !! idiom:

>> !!('[email protected]' =~ /^r\+.*@site.com$/) #=> false
>> !!('[email protected]' =~ /^r\+.*@site.com$/) #=> true

Ответ 2

Если вы находитесь в Rails, есть start_with? метод по строкам:

"foo".starts_with?('f') # => true
"foo".starts_with?('g') # => false

Вне рельсов регулярные выражения являются разумным решением:

"foo" =~ /^f/ # => true
"foo" =~ /^g/ # => false

Поскольку Ruby использует правдивость в операторах if, если вы в конечном итоге используете регулярные выражения, вы можете просто использовать возвращаемое значение для переключения:

if "foo" =~ /^f/
  puts "Was true!"
else
  puts "Was false!"
end

Если вы пишете метод и хотите вернуть логический результат, вы всегда можете использовать трюк с двойным ударом:

def valid_email?
  !!("foo" =~ /^f/)
end

Rubular (rubular.com) - хороший сайт для тестирования регулярных выражений Ruby до 1.9. (1.9 regexes добавили такие вещи, как lookahead.)

Ответ 3

Если вы не хотите использовать "!!" Оператор:

!!("foo" =~ /^f/)

вы можете использовать тернарный оператор (может выглядеть более очевидным):

"foo" =~ /^f/ ? true : false

Ответ 4

Вы также можете использовать оператор '==='

/f/ === 'foo' #=> true

/f/ === 'bat' #=> false

Примечание. Часть регулярного выражения находится слева:

/YOUR_REGEX/=== 'YOUR_STRING'