Várias dessas respostas estão próximas para o caminho certo. Estes são os pontos para minha submissão.
- Você deseja usar um domínio -- NÃO o sistema de regras.
- Você NÃO deseja validar esses endereços de e-mail com um regex. (Atualização de março de 2017:não é mais verdade)
Eu mostro dois métodos de como fazer isso direito em DBA.StackExchange.com . Ambos para verificar o registro MX e também usando a especificação HTML5. Aqui está o curto e doce.
CREATE EXTENSION citext;
CREATE DOMAIN email AS citext
CHECK ( value ~ '^[a-zA-Z0-9.!#$%&''*+/=?^_`{|}~-][email protected][a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$' );
SELECT '[email protected]'::email;
SELECT CAST('[email protected]' AS email);
Para mais informações eu altamente sugiro que você leia a resposta na íntegra . Na resposta, também mostro como você cria um
DOMAIN
sobre Email::Valid
, e explique por que não uso mais esse método.