Ruby,Rails - 如何检查 var 是不是是电子邮件
Posted
技术标签:
【中文标题】Ruby,Rails - 如何检查 var 是不是是电子邮件【英文标题】:Ruby, Rails - how to check if a var is an EmailRuby,Rails - 如何检查 var 是否是电子邮件 【发布时间】:2011-06-03 03:57:08 【问题描述】:Rails 3 或 Ruby 是否有内置方法来判断 var 是否为 EMAIL ADDRESS?
例子
1 returns false
dadadad@asdasd.net returns true
blah+asdasds@asdasd.net returns true
asdasdasdads returns false
也许像,如果 1.is_a?电子邮件结束
谢谢
【问题讨论】:
尝试验证电子邮件地址的问题在于,允许的地址格式多种多样,无法用简单的正则表达式处理。即使是复杂的正则表达式也无法捕捉到所有极端情况,但是,即使可以确定地址格式是否正确,它仍然无法判断它是否是真实地址。由于问题的复杂性,有两种解决方案:向该地址发送电子邮件并查看收件人是否响应,或者对用户 ID、“@”和域进行简单检查,并称其足够好。第二个很容易被欺骗。 有关此主题的深入讨论,请参阅How to use a regular expression to validate an email addresses? 【参考方案1】:我最终使用了 Rails gem,EmailVeracity,效果很好
【讨论】:
该库已弃用,最后一次提交是 6 年前。【参考方案2】:这样的事情应该可以工作:
def isEmail(str)
return str.match(/[a-zA-Z0-9._%]@(?:[a-zA-Z0-9]\.)[a-zA-Z]2,4/)
end
【讨论】:
您无法使用正则表达式验证电子邮件地址。 ***.com/questions/201323/… @Andrew 如果我可以使用正则表达式,我应该使用什么? 这不适用于大多数域,因为您允许域名只是单个字母,例如 foo@a.com。可能你想写这个:/[a-zA-Z0-9._%]@(?:[a-zA-Z0-9]+\.)[a-zA-Z]2,4/
【参考方案3】:
在模型中,您可以使用验证器(在 ActiveModel 中)和
类似这样的:
class User
include ActiveModel::Validations
validates :email, :presence => true,
:format => :with => /^[^@\s]+)@((?:[-a-z0-9A-Z]+\.[a-zA-Z]2,)$/
end
见http://yehudakatz.com/2010/01/10/activemodel-make-any-ruby-object-feel-like-activerecord/ 有关 ActiveModel 的更多信息
【讨论】:
您无法使用正则表达式验证电子邮件地址。 ***.com/questions/201323/… 他只要求提供一部分电子邮件地址,而不是整个 RFC。 按照这个逻辑,def is_email(str) str =~ /asd/ end
会按照他的要求做吗?
正则表达式 ^([^@\s]+)@([-a-z0-9A-Z]+)\.([a-zA-Z]2,)$
至少匹配某个电子邮件地址时存在语法错误。【参考方案4】:
使用https://github.com/OpenGems/rails_email_checker
ActiveModel 电子邮件验证。检查 MX 记录、子地址、正则表达式、白名单和黑名单检查
【讨论】:
以上是关于Ruby,Rails - 如何检查 var 是不是是电子邮件的主要内容,如果未能解决你的问题,请参考以下文章