41

I have a User model in a Rails application which has an email field. Is there a default validation that will ensure the email is in the correct format? If not, how would I go about validating that field?

Lyudmil
  • 1,163
  • 2
  • 13
  • 21
asmista
  • 451
  • 1
  • 5
  • 9
  • by `valid email address` do you mean the email really exists, or it fits email format? – nurettin Dec 09 '12 at 06:55
  • 12
    It's odd that this was closed. It may not be terribly specific, but I see a real question here. – sscirrus May 23 '13 at 19:11
  • @sscirrus Well, to be totally knit-picky, he didn't actually ask a question. Also, it's not good conduct to just ask for code handouts on SO. A more appropriate question would be "how would one go about writing code that does [desired outcome]?" – Michael Dorst Jun 23 '13 at 05:38
  • @MichaelDorst Fair point - while I do see a question in the text, I agree with you that SO isn't for code handouts. – sscirrus Jun 24 '13 at 18:34
  • @sscirrus As I said, I'm being knit-picky, but the OP simply **stated** what he was looking for, he did not **ask** a question. You may be able to **infer** a question from that statement, but the OP did not explicitly ask anything - hence: `closed as not a real question`. I agree with the five people who chose to do that because I feel that ill-formed questions can only lead to ill-formed answers, neither of which are helpful to this community. – Michael Dorst Jun 24 '13 at 22:50
  • I follow this post: http://stackoverflow.com/questions/4776907/what-is-the-best-easy-way-to-validate-an-email-address-in-ruby. I tested article post: http://my.rails-royce.org/2010/07/21/email-validation-in-ruby-on-rails-without-regexp/ by Ruby 2.1.0 and Rails 4.0.3 hosted into Heroku. – d.danailov Apr 07 '14 at 09:12
  • Here is the new way to do it: `validates :email, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, on: :create }` – Cyzanfar Oct 11 '17 at 21:10

1 Answers1

97

Add in your gemfile:

gem 'validates_email_format_of'

and in your model:

validates :email, email_format: { message: "doesn't look like an email address" }

Or if you don't want use a gem, use regex:

validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
Chris Cashwell
  • 22,308
  • 13
  • 63
  • 94