Как определить, есть ли совпадение, возвращаемое true или false в rails?
Я хочу создать тест, который возвращает true или false для обработки электронной почты.
На данный момент, если адрес электронной почты начинается с r+, то это правда, иначе это ложь. Это поможет нашему серверу игнорировать большое количество спама, с которым мы сталкиваемся.
Примеры:
[email protected] .. true
[email protected] .. true
[email protected] .. FALSE
Как наиболее эффективно справиться с этим с помощью Rails / ruby/regex?
Спасибо
Цель
- это один вкладыш в rails / ruby с:
ABORT if XXXXX == 0
4 ответов:
Это будет соответствовать:
/^r\+.*@site.com$/Примеры:
Поскольку все, что не является>> '[email protected]' =~ /^r\+.*@site.com$/ #=> 0 >> '[email protected]' =~ /^r\+.*@site.com$/ #=> nilnilили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/) endRubular (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