【问题标题】: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?

标签: ruby-on-rails ruby ruby-on-rails-3 validation email-validation


【解决方案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

【讨论】:

  • 您无法使用正则表达式验证电子邮件地址。 stackoverflow.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 的更多信息

【讨论】:

  • 您无法使用正则表达式验证电子邮件地址。 stackoverflow.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 记录、子地址、正则表达式、白名单和黑名单检查

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2011-06-07
    • 2018-01-31
    相关资源
    最近更新 更多