Как можно проверить формат поля электронной почты в ActiveRecord?

У меня есть модель пользователя в приложении Rails с полем электронной почты. Существует ли проверка по умолчанию, которая гарантирует, что электронная почта имеет правильный формат? Если нет, как мне проверить это поле?


person asmista    schedule 09.12.2012    source источник
comment
под valid email address вы имеете в виду, что электронная почта действительно существует или она соответствует формату электронной почты?   -  person nurettin    schedule 09.12.2012
comment
Странно, что закрыли. Это может быть не очень конкретно, но я вижу здесь реальный вопрос.   -  person sscirrus    schedule 23.05.2013
comment
@sscirrus Ну, если быть совсем придирчивым, то на самом деле он не задал вопрос. Кроме того, нехорошо просто просить раздачи кода на SO. Более подходящим вопросом был бы вопрос: как написать код, который дает [желаемый результат]?   -  person Michael Dorst    schedule 23.06.2013
comment
@MichaelDorst Справедливое замечание - хотя я вижу вопрос в тексте, я согласен с вами в том, что SO не предназначен для раздачи кода.   -  person sscirrus    schedule 24.06.2013
comment
@sscirrus Как я уже сказал, я придирчив, но ОП просто указал, что он искал, он не задал вопрос. Возможно, вы сможете вывести вопрос из этого утверждения, но ОП ничего явно не спрашивал - следовательно: closed as not a real question. Я согласен с пятью людьми, которые решили это сделать, потому что я чувствую, что неправильно сформулированные вопросы могут привести только к неправильно сформулированным ответам, ни один из которых не полезен для этого сообщества.   -  person Michael Dorst    schedule 25.06.2013
comment
Я следую этому сообщению: stackoverflow.com/questions/4776907/. Я протестировал сообщение статьи: my.rails-royce.org/2010/07/21/ от Ruby 2.1.0 и Rails 4.0.3, размещенных в Heroku.   -  person d.danailov    schedule 07.04.2014
comment
Вот новый способ сделать это: validates :email, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, on: :create }   -  person Cyzanfar    schedule 12.10.2017


Ответы (1)


Добавьте в свой gemfile:

gem 'validates_email_format_of'

и в вашей модели:

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

Или, если вы не хотите использовать драгоценный камень, используйте регулярное выражение:

validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
person Jonathan Vukovich-Tribouharet    schedule 09.12.2012
comment
Предоставленное вами регулярное выражение, похоже, не работает:/ - person Paladini; 15.05.2016
comment
Используйте только: with: /@/ davidcel.is/posts/stop-validating-email -адреса-с-регулярным выражением - person Bruno Casali; 27.05.2016