REGEXP_LIKE(电子邮件在 Oracle PL 中不起作用 SQL

REGEXP_LIKE( email not working in Oracle PL SQL

我在数据库设计中创建的用于验证电子邮件地址的正则表达式不起作用,尽管我已经阅读了多个使用完全相同表达式的 Oracle 论坛。每次我尝试插入电子邮件时,我都会遇到检查约束冲突。

CONSTRAINT check_email CHECK(REGEXP_LIKE(
Email,'^[A-Za-z0-9._-]+@[A-Za-z0-9._-]+\.[A-Za-z]{2-4}$'))

尝试以下形式的插入时:

INSERT INTO Member VALUES(0042, 'jasper@example.ie'); 

任何人都可以阐明这一点吗?

谢谢!

我试图重现你的问题。问题是在句点后的最后一个字母的范围内使用“-”。请改用逗号。

考虑:

Table:

    CREATE TABLE abc_1(abc_id NUMBER(10), email VARCHAR2(100));

约束(与您的相同):

    ALTER TABLE abc_1 ADD CONSTRAINT abc_email_check CHECK(REGEXP_LIKE(Email,'^[A-Za-z0-9._-]+@[A-Za-z0-9._-]+\.[A-Za-z]{2-4}$'));

插入语句:

    INSERT INTO abc_1 VALUES (1001, 'myEmail@service.c'); --Fails, expected
    INSERT INTO abc_1 VALUES (1001, 'myEmail@service.com'); --Fails, not expected

问题出在范围规范 {2-4} 上。哪个应该是 {2,4} 将您的检查约束替换为:

    ALTER TABLE abc_1 ADD CONSTRAINT abc_email_check CHECK(REGEXP_LIKE(Email,'^[A-Za-z0-9._-]+@[A-Za-z0-9._-]+\.[A-Za-z]{2,4}$'));

    INSERT INTO abc_1 VALUES (1001, 'myEmail@service.c'); --Fails, expected
    INSERT INTO abc_1 VALUES (1001, 'myEmail@service.com'); --Success, expected

在正则表达式中指定范围时,方式为{m,n},其中m为下限,n为上限。