我在数据库设计中创建的用于验证电子邮件地址的正则表达式无效,即使我已阅读多个使用完全相同表达式的Oracle论坛。每当我尝试插入电子邮件时,都会遇到检查约束违规。
CONSTRAINT check_email CHECK(REGEXP_LIKE(
Email,'^[A-Za-z0-9._-]+@[A-Za-z0-9._-]+\.[A-Za-z]{2-4}$'))
尝试表格的INSERTS时:
INSERT INTO Member VALUES(0042, 'jasper@example.ie');
任何人都可以对此有所了解吗?
谢谢!
答案 0 :(得分:3)
我试图复制你的问题。问题是在您的范围内使用' - '表示句点之后的最后一个字母。请改用逗号。
考虑:
表:
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为上限。