如何在postgres中创建使用正则表达式的约束?
发布于 2011-04-17 05:33:32
CREATE TABLE emails (
email varchar
CONSTRAINT proper_email CHECK (email ~* '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+$')
);(regex可能不完整,您可以在网上搜索regexp以查找匹配的电子邮件,然后选择您最喜欢的)。
发布于 2011-04-17 12:44:15
我建议使用现有的电子邮件地址解析模块,而不是构建自己的模式匹配。例如:
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))
);发布于 2017-09-16 22:17:38
您还可以创建domain,并在定义表列时将其用作类型,例如
CREATE DOMAIN email AS TEXT CHECK (VALUE ~* '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+$');
CREATE TABLE emails (
email email
);这样,每次在数据库中使用包含列的电子邮件时,就不需要重新定义正则表达式。
https://stackoverflow.com/questions/5689718
复制相似问题