Как определить, есть ли совпадение, возвращаемое true или false в rails?



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



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



Примеры:



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


Как наиболее эффективно справиться с этим с помощью Rails / ruby/regex?



Спасибо



Цель



- это один вкладыш в rails / ruby с:



ABORT if XXXXX == 0
602   4  

4 ответов:

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

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

Примеры:

>> '[email protected]' =~ /^r\+.*@site.com$/ #=> 0
>> '[email protected]' =~ /^r\+.*@site.com$/ #=> nil
Поскольку все, что не является nil или false истинно в Ruby, вы можете использовать это регулярное выражение в условии. Если вы действительно хотите логическое выражение, Вы можете использовать идиому !!:
>> !!('[email protected]' =~ /^r\+.*@site.com$/) #=> false
>> !!('[email protected]' =~ /^r\+.*@site.com$/) #=> true

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

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

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

"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 добавили такие вещи, как lookahead.)

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

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

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

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

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

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

/f/ === 'bat' #=> false
Примечание: регулярное выражение находится слева:

/YOUR_REGEX/ = = = 'YOUR_STRING'

Comments

    Ничего не найдено.