12

電子メール アドレスが 2 つのドメインのいずれかではないかどうかを検出しようとしていますが、Ruby の構文に問題があります。私は現在これを持っています:

if ( !email_address.end_with?("@domain1.com") or !email_address.end_with?("@domain2.com"))
  #Do Something
end

これは条件の正しい構文ですか?

4

4 に答える 4

31

ここではなく、どちらにも一致しない文字列を見つけようとしているためor、論理(and) が必要です。&&

if ( !email_address.end_with?("@domain1.com") && !email_address.end_with?("@domain2.com"))
  #Do Something
end

を使用するorと、いずれかの条件が true の場合でも、条件全体が false のままになります。

優先順位が高いため、&&代わりにを使用していることに注意してください。and詳細はここでよく概説されています

コメントから:

unless論理 orを使用して、同等の条件を作成できます。||

unless email_address.end_with?("@domain1.com") || email_address.end_with?("@domain2.com")

の両側を||で否定する必要がないので、これは少し読みやすいかもしれません!

于 2013-01-19T20:01:09.357 に答える
6

さらに多くのドメインが追加されると、反復作業email_address.end_with?はすぐに退屈になります。別:

if ["@domain1.com", "@domain2.com"].none?{|domain| email_address.end_with?(domain)}
  #do something
end
于 2013-01-19T20:45:15.480 に答える
5

end_with?複数の引数を取るのを忘れました:

unless email_address.end_with?("@domain1.com", "@domain2.com")
 #do something
end
于 2013-01-20T00:08:24.037 に答える
3

どうですか:

(!email_address[/@domain[12]\.com\z/])
于 2013-01-19T20:10:36.967 に答える