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/])