Whenever I have wanted to validate an email address it has been because I wanted to be somewhat certain I can send an email to someone. Usually this happens as part of a signup procedure.
At this point I have pretty much one criteria:
- Don't reject a valid email address realistically in use by a potential user. Err on the side of accepting too much.
Quite frankly, I don't care about the RFC at this point, neither does the user. I care that my users can enter their email address and get on with using my product. I appreciate it if the application catches any misspellings of their email addresses, though - this is the opportune moment for them to correct it.
- Should not accept local email addresses: No user ever needed to sign up using
"postmaster@localhost"
or"bob@1.2.3.4"
even though they are perfectly valid email addresses. - Must work with I18n like Rails' built-in validators do. If not configured otherwise, the default translation key must be
:invalid
.
validates :email, :email_address => true
If you want to use a specific regular expression:
validates :email, :email_address => {:format => /.+@.+\..+/}
If a regular expression isn't enough for you, you can include your own rules for email addresses. For example, you could validate that all email adresses belong to the same company:
validates :email, :email_address => {
:with => proc { |address| address.end_with?("@substancelab.com") }
}
This also checks that the domain actually has an MX record. Note this might take a while because of DNS lookups.
validates :email, :email_address => {:mx => true}
Add this line to your application's Gemfile:
gem 'activemodel-email_address_validator'
And then execute:
$ bundle
Or install it yourself as:
$ gem install activemodel-email_address_validator
- http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address
- http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/
- http://blog.myitcv.org.uk/2013/03/14/validators-in-rails-using-email-as-an-example.html
- https://github.com/balexand/email_validator
- https://github.com/codyrobbins/active-model-email-validator
- https://github.com/franckverrot/activevalidators
- https://github.com/hallelujah/valid_email
- https://github.com/micke/valid_email2
- https://github.com/validates-email-format-of/validates_email_format_of
- Fork it ( https://github.com/substancelab/activemodel-email_address_validator/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request