Solución:
CREATE TABLE emails (
email varchar
CONSTRAINT proper_email CHECK (email ~* '^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+[.][A-Za-z]+$')
);
(La expresión regular puede estar incompleta, puede buscar expresiones regulares para coincidencias de correo electrónico en toda la web y elegir la que más le guste).
Recomiendo usar un módulo de análisis de direcciones de correo electrónico existente en lugar de crear su propia coincidencia de patrones. Por ejemplo:
CREATE OR REPLACE FUNCTION check_email(email text) RETURNS bool
LANGUAGE plperlu
AS $$
use Email::Address;
my @addresses = Email::Address->parse($_[0]);
return scalar(@addresses) > 0 ? 1 : 0;
$$;
CREATE TABLE emails (
email varchar
CONSTRAINT proper_email CHECK (check_email(email))
);
También puede crear un dominio y usarlo como un tipo al definir columnas de tabla, p. Ej.
CREATE DOMAIN email AS TEXT CHECK (VALUE ~* '^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+[.][A-Za-z]+$');
CREATE TABLE emails (
email email
);
De esta manera, no necesitará redefinir la expresión regular cada vez que se use un correo electrónico que contenga columnas en la base de datos.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)