Как я могу создать ограничение, чтобы проверить, является ли электронная почта действительной в postgres? - PullRequest
26 голосов
/ 17 апреля 2011

Как создать ограничение для использования регулярного выражения в postgres?

Ответы [ 3 ]

48 голосов
/ 17 апреля 2011
CREATE TABLE emails (
    email varchar
    CONSTRAINT proper_email CHECK (email ~* '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+$')
);

(регулярное выражение может быть неполным, вы можете найти регулярное выражение для электронной почты, совпадающее по всей сети, и выбрать наиболее подходящее).

19 голосов
/ 17 апреля 2011

Я рекомендую использовать существующий модуль синтаксического анализа адресов электронной почты вместо создания собственного сопоставления с шаблоном. Например:

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))
);
3 голосов
/ 16 сентября 2017

Вы также можете создать домен и использовать его в качестве типа при определении столбцов таблицы, например,

CREATE DOMAIN email AS TEXT CHECK (VALUE ~* '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+$');

CREATE TABLE emails (
    email email
);

Таким образом, вам не нужно будет переопределять регулярное выражение каждый раз, когда отправляется электронное письмо.содержащий столбцы используется в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...