2 Условия в выражении if
Я пытаюсь определить, является ли адрес электронной почты не одним из двух доменов, но у меня возникают некоторые проблемы с синтаксисом ruby. В настоящее время у меня есть это:
if ( !email_address.end_with?("@domain1.com") or !email_address.end_with?("@domain2.com"))
#Do Something
end
Является ли это правильным синтаксисом для условий?
Ответы
Ответ 1
Вместо or
здесь вам нужен логический &&
(и), потому что вы пытаетесь найти строки, которые не соответствуют ни одному.
if ( !email_address.end_with?("@domain1.com") && !email_address.end_with?("@domain2.com"))
#Do Something
end
Используя or
, если любое условие истинно, все условие будет по-прежнему ложным.
Обратите внимание, что я использую &&
вместо and
, так как он имеет более высокий приоритет. Подробности подробно описаны здесь
Из комментариев:
Вы можете создать эквивалентное условие, используя unless
с логическим или ||
unless email_address.end_with?("@domain1.com") || email_address.end_with?("@domain2.com")
Это может быть немного легче читать, так как обе стороны ||
не должны быть отменены с помощью !
.
Ответ 2
Если добавлено больше доменов, то повторяющийся email_address.end_with?
становится очень скучным. Альтернатива:
if ["@domain1.com", "@domain2.com"].none?{|domain| email_address.end_with?(domain)}
#do something
end
Ответ 3
Я забыл end_with?
принимает несколько аргументов:
unless email_address.end_with?("@domain1.com", "@domain2.com")
#do something
end
Ответ 4
Как насчет:
(!email_address[/@domain[12]\.com\z/])