我正在尝试检测电子邮件地址是否不是两个域之一,但我在使用ruby语法时遇到了一些麻烦。我目前有这个:
if ( !email_address.end_with?("@domain1.com") or !email_address.end_with?("@domain2.com"))
#Do Something
end
这是条件的正确语法吗?
答案 0 :(得分:31)
这里不需要or
,而是想要一个逻辑&&
(和),因为您正在尝试查找与 匹配的字符串。
if ( !email_address.end_with?("@domain1.com") && !email_address.end_with?("@domain2.com"))
#Do Something
end
使用or
,如果任一条件为真,则整个条件仍为假。
请注意,我使用&&
代替and
,因为它具有更高的优先级。详细信息为well outlined here
您可以使用unless
和逻辑||
unless email_address.end_with?("@domain1.com") || email_address.end_with?("@domain2.com")
这可能更容易阅读,因为||
的双方都不必被!
否定。
答案 1 :(得分:6)
如果添加了更多域名,那么重复的email_address.end_with?
会变得非常无聊。替代方法:
if ["@domain1.com", "@domain2.com"].none?{|domain| email_address.end_with?(domain)}
#do something
end
答案 2 :(得分:5)
我忘了end_with?
有多个参数:
unless email_address.end_with?("@domain1.com", "@domain2.com")
#do something
end
答案 3 :(得分:3)
怎么样:
(!email_address[/@domain[12]\.com\z/])