首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建约束来检查电子邮件在postgres中是否有效?

如何创建约束来检查电子邮件在postgres中是否有效?
EN

Stack Overflow用户
提问于 2011-04-17 05:24:51
回答 4查看 26.3K关注 0票数 37

如何在postgres中创建使用正则表达式的约束?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-17 05:33:32

代码语言:javascript
运行
复制
CREATE TABLE emails (
    email varchar
    CONSTRAINT proper_email CHECK (email ~* '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+$')
);

(regex可能不完整,您可以在网上搜索regexp以查找匹配的电子邮件,然后选择您最喜欢的)。

票数 63
EN

Stack Overflow用户

发布于 2011-04-17 12:44:15

我建议使用现有的电子邮件地址解析模块,而不是构建自己的模式匹配。例如:

代码语言:javascript
运行
复制
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))
);
票数 23
EN

Stack Overflow用户

发布于 2017-09-16 22:17:38

您还可以创建domain,并在定义表列时将其用作类型,例如

代码语言:javascript
运行
复制
CREATE DOMAIN email AS TEXT CHECK (VALUE ~* '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+$');

CREATE TABLE emails (
    email email
);

这样,每次在数据库中使用包含列的电子邮件时,就不需要重新定义正则表达式。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5689718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档