在Ruby中validation电子邮件地址的最佳/简单方法是什么?

validation电子邮件地址(在服务器端)的最佳/简单的方法是什么?

你可以看看它是否匹配像在这个Railsvalidation器中使用的正则expression式:

validates_format_of :email,:with => /\A[^@\s]+@([^@\s]+\.)+[^@\s]+\z/ 

但是,如果你使用devise,只要做到:

 validates_format_of :email,:with => Devise::email_regexp 

来源: http : //lindsaar.net/2008/4/14/tip-4-detecting-a-valid-email-address

编辑1:

有用的网站进行testing: http : //www.rubular.com/

在Ruby中? 与任何语言相同的方式。

发送一个确认电子邮件地址与收件人必须点击的电子邮件地址被认为是完全validation的链接。

为什么完美格式化的地址可能仍然是无效的(在该地址没有实际的用户,被垃圾邮件filter阻止等等),有许多原因。 唯一可以确定的方法是成功完成一些描述的端到端事务。

我知道这是一个老问题,但我正在寻找一个简单的方法来做到这一点。 我遇到了一个email_validatorgem,这是非常简单的设置和使用。

作为validation者

validates :my_email_attribute, :email => true

在模型外进行validation

EmailValidator.valid?('narf@example.com') # boolean

我希望这对大家有所帮助。

快乐的鳕鱼

 validates :email, presence: true, format: /\w+@\w+\.{1}[a-zA-Z]{2,}/ 

检查电子邮件字段不是空白,并且一个或多个字符都在“@”之后,并在其后面

增加了特异性,在@之前的任何一个或多个单词字符以及任何一个或多个单词字符之前和之间具体为1 . 至less2个字母之后

发送确认邮件,我会通常使用这个validation器…干

 # lib/email_validator.rb class EmailValidator < ActiveModel::EachValidator EmailAddress = begin qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]' dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]' atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-' + '\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+' quoted_pair = '\\x5c[\\x00-\\x7f]' domain_literal = "\\x5b(?:#{dtext}|#{quoted_pair})*\\x5d" quoted_string = "\\x22(?:#{qtext}|#{quoted_pair})*\\x22" domain_ref = atom sub_domain = "(?:#{domain_ref}|#{domain_literal})" word = "(?:#{atom}|#{quoted_string})" domain = "#{sub_domain}(?:\\x2e#{sub_domain})*" local_part = "#{word}(?:\\x2e#{word})*" addr_spec = "#{local_part}\\x40#{domain}" pattern = /\A#{addr_spec}\z/ end def validate_each(record, attribute, value) unless value =~ EmailAddress record.errors[attribute] << (options[:message] || "is not valid") end end end 

在你的模型中

 validates :email , :email => true 

要么

  validates :email, :presence => true, :length => {:minimum => 3, :maximum => 254}, :uniqueness => true, :email => true 

由于主要答案的博客网站是closures的,这里是通过很好的cacher或gist从该网站的代码片段:

 # http://my.rails-royce.org/2010/07/21/email-validation-in-ruby-on-rails-without-regexp/ class EmailValidator < ActiveModel::EachValidator # Domain must be present and have two or more parts. def validate_each(record, attribute, value) address = Mail::Address.new value record.errors[attribute] << (options[:message] || 'is invalid') unless (address.address == value && address.domain && address.__send__(:tree).domain.dot_atom_text.elements.size > 1 rescue false) end end 

您可以使用

 <%=email_field_tag 'to[]','' ,:placeholder=>"Type an email address",:pattern=>"^([\w+-.%]+@[\w-.]+\.[A-Za-z]{2,4},*[\W]*)+$",:multiple => true%> 

捷径forms:

  validates :email, :format => /@/ 

正常forms(正则expression式):

 validates :email, :format => { :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[az]{2,})\Z/ } 

来源:确认者类