@ jensgram действительно хороший ответ, но на самом деле он по-прежнему позволяет использовать электронную почту без домена, например, foo @ bar действителен как foo@bar.com.
Вот небольшое изменение, которое требует string@string.string:
/\A\S+@.+\.\S+\z/
или, более читабельно (хотя скобки не нужны):
/\A(\S+)@(.+)\.(\S+)\z/
Поиграйте с этим
* Примечание: это регулярное выражение лучше, чем многие, более сложные, из-за того, насколько разнообразным может быть электронное письмо. Технически, электронная почта может даже использовать пробелы, если она заключена в кавычки, например "Это действительный адрес электронной почты" @ email.com
* Редактировать: я заменил ^
и $
на \A
и \z
, чтобы предотвратить ошибку многострочной привязки при тестировании рельсов.
* Редактировать: Спасибо @Barry за то, что он заметил, что регулярное выражение допускает пробелы. Обновил регулярное выражение с \ S, чтобы не допускать электронных писем с неправильными пробелами. Разрешается использовать несколько точек, так как email@foo.bar.com является приемлемым адресом.