【问题标题】:Defining patterns for email adresses and phone numbers in SQLPLUS, Oracle在 SQLPLUS、Oracle 中定义电子邮件地址和电话号码的模式
【发布时间】:2013-12-24 11:42:51
【问题描述】:

我的目的是知道如何为每行包含电子邮件的列以及每行包含电话号码的列提供有效模式。我尝试了一些我在网上尝试过的模式,但它们不起作用。所以我问任何知道如何定义这些模式的人来帮助我。

这是我想要的模式:

在电子邮件中:每个人都使用的标准模式。 电话号码:电话号码最多10位,以0开头,后面9位可以是0-9之间的任意数字 下面是建表的代码:

DROP TABLE COMITE_I;
create table COMITE_I
(
IDCOMITE_I             INTEGER              not null,
NOMCOMITE_I            VARCHAR2(100),
PRENOMCOMITE_I         VARCHAR2(100),
EMAILCOMITE_I          VARCHAR2(100),
MDPCOMITE_I            VARCHAR2(50),
NUMTELCOMITE_I         VARCHAR2(20),
constraint PK_COMITE_I primary key (IDCOMITE_I),
constraint CK_emailComite_I  CHECK(REGEXP_LIKE(emailComite_I,'[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})')),
constraint CK_numTelComite_I CHECK(REGEXP_LIKE(numTelComite_I,'0([0-9]{9})'))
);

这是插入的 SQL 代码:

INSERT INTO Comite_I (idComite_I,nomComite_I,prenomComite_I,emailComite_I,mdpComite_I,numTelComite_I) VALUES (1,'Nom1','Prenom1','truc@machin.com','azerty','0234567899');

返回错误

ERROR at line 1:
ORA-02290: check constraint (GESTION_CONGRES.CK_EMAILCOMITE_I) violated

提前感谢您的帮助,请记住我是初学者 :) 谢谢

【问题讨论】:

    标签: sql oracle11g pattern-matching sqlplus


    【解决方案1】:

    首先,impossible to validate an e-mail address 使用正则表达式,因为您不知道它是否存在。它几乎可以判断它是否可能有效,但 Oracle 实现还不够复杂,无法做到这一点。这意味着您在 Oracle 中所做的任何电子邮件“验证”都受我们所谓的“业务规则”的约束,您定义了您认为有效的电子邮件地址是在某些知识上您会错的场合。

    您违反了此处的约束检查,因为您的正则表达式不正确。如果您将其更改为以下内容,它将起作用:

    regexp_like('truc@machin.com'
    , '[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})')
    

    SQL Fiddle

    你逃避点太多了......

    我实际上更喜欢使用 Oracle 的 POSIX 实现,我认为它使事情更清楚,尽管您必须使用 match parameter, i,这表明您想要进行不区分大小写的搜索:

    regexp_like('truc@machin.com'
    , '[_-\+[:alnum:]]+(\.[_-[:alnum:]]+)*@[-[:alnum:]]+(\.[[:alnum:]]+)*(\.[[:alpha:]]{2,})'
    , 'i')
    

    【讨论】:

    • 非常感谢 :) 效果很好(我用的是第一个)。
    • 没问题@user3078046。如果您觉得这回答了您的问题,请考虑 accepting it - 绿色复选标记。它告诉社区您的问题已解决,但绝对没有义务这样做。
    猜你喜欢
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 2014-02-12
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多