使用姓名和电子邮件阻止电子邮件验

时间:2014-08-20 08:18:41

标签: ruby-on-rails ruby ruby-on-rails-4

我想为电子邮件提交验证。但是有一些不同的方式。 我将允许用户以两种格式输入电子邮件,例如" name' email@example.com' " 和简单的' email@example.com' 。所以基本上我想写一个验证,它将检查当前的有效电子邮件格式价值与否。

只需要进行自定义验证即可检查输入电子邮件值中是否存在有效的电子邮件格式。

我的模特看起来像:

class Contact < ActiveRecord::Base
   validates :email ,presence: true
    validate :email_format

   def email_format
    ??? what to write here ???
   end

end

我如何为此编写验证。

3 个答案:

答案 0 :(得分:3)

您需要稍微修改案例中的正则表达式。

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

这将符合以下格式。

soundar.rathinsamy@gmail.com
Soundar<soundar.rathinsamy@gmail.com>
Soundar <soundar.rathinsamy@gmail.com>
soundar<soundar.rathinsamy@gmail.com>
Soundar Rathinsamy<soundar.rathinsamy@gmail.com>
Soundar Rathinsamy <soundar.rathinsamy@gmail.com>
soundar rathinsamy <soundar.rathinsamy@gmail.com>

如果您需要进行更改,请继续在rubular.com

编辑此正则表达式

答案 1 :(得分:1)

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

取自apidock.com:http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates

答案 2 :(得分:1)

此代码从电子邮件中提取&#34;&lt;&#34;之间的字符串。和&#34;&gt;&#34;但是,如果它没有找到匹配,则它会接收电子邮件中的最后一个字......在任何一种情况下,它都会接受该字符串并测试有效的电子邮件。

因此它适用于"John john@example.com""John<john@example.com>"

def email_format
  test_string = $1 if email =~ /\<([^\>]+)\>/
  test_string = email.split(' ').last unless test_string
  return if test_string =~ /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
  errors.add(:email, "not a valid email")
end