如何验证模型中的多个电子邮件地址?

Kie*_*yes 1 ruby ruby-on-rails

例如:逗号分隔在单个文本字段中:mail1 @ domain.com,mail2 @ someotherdomain,...

rya*_*anb 6

您可以使用TMail :: Address模块​​验证电子邮件,如下所示.可以使用该validate方法添加自定义验证.

validate :check_email_addresses

def check_email_addresses
  email_addresses.split(/,\s*/).each do |email|
    TMail::Address.parse(email)
  end
rescue TMail::SyntaxError
  errors.add(:email_addresses, "are not valid")
end
Run Code Online (Sandbox Code Playgroud)

更新: TMail :: Address模块​​似乎对被认为是有效的电子邮件地址过于宽松(请参阅下面的注释),因此您可以使用正则表达式.

validate :check_email_addresses

def check_email_addresses
  email_addresses.split(/,\s*/).each do |email| 
    unless email =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
      errors.add(:email_addresses, "are invalid due to #{email}")
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

有多种正则表达式解决方案可用于验证电子邮件地址.有关详情,请参阅此页面.