首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REGEXP_LIKE( Oracle中不工作的电子邮件)

REGEXP_LIKE( Oracle中不工作的电子邮件)
EN

Stack Overflow用户
提问于 2016-12-09 11:05:09
回答 1查看 561关注 0票数 0

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

代码语言:javascript
复制
CONSTRAINT check_email CHECK(REGEXP_LIKE(
Email,'^[A-Za-z0-9._-]+@[A-Za-z0-9._-]+\.[A-Za-z]{2-4}$'))

尝试插入表单时:

代码语言:javascript
复制
INSERT INTO Member VALUES(0042, 'jasper@example.ie'); 

有人能解释一下这件事吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-09 11:30:06

我试着复制你的问题。问题是在句号之后的最后一个字母范围内使用“-”。用逗号代替。

考虑:

表:

代码语言:javascript
复制
    CREATE TABLE abc_1(abc_id NUMBER(10), email VARCHAR2(100));

约束(与您的约束相同):

代码语言:javascript
复制
    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}$'));

插入声明:

代码语言:javascript
复制
    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},将check约束替换为:

代码语言:javascript
复制
    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是上限。

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

https://stackoverflow.com/questions/41058990

复制
相关文章

相似问题

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