【发布时间】:2011-11-29 02:40:05
【问题描述】:
我正在使用 Oracle 11g,并尝试创建表定义创建约束。
我试图添加检查约束来验证一些信息(如电子邮件地址、电话号码等...)
Oracle 11g 中有什么东西可以让我做这样的事情吗?
constraint CK_CONSTRAINT_NAME check (EMAIL like 'REGEX')
我想使用的正则表达式(从 regexLib 中获取)是:
^[a-zA-Z][a-zA-Z0-9_\.\-]+@([a-zA-Z0-9-]{2,}\.)+([a-zA-Z]{2,4}|[a-zA-Z]{2}\.[a-zA-Z]{2})$
我认为 Oracle 11g(如果我错了,请纠正我)不支持 RegEx 的这种格式...
我见过使用 REGEX_LIKE 的方法,但它似乎只适用于 WHERE 子句。
我想将其保留为检查约束,而不是触发器或外部函数/脚本。
另外,我在这里的其他线程中读到,有人说 RegEx' 不是验证电子邮件地址格式和此类信息的好方法。评论中没有给出原因,如果有原因,我想知道原因!
【问题讨论】:
-
该正则表达式应该被取出并拍摄。我希望 RegexLib 上不是这样。 “
alum”?无用的量词?缺少标点符号?除此之外,正则表达式不适合验证电子邮件地址,因为格式对于可靠的正则表达式来说太可变了(您总是会错过有效邮件并接受无效邮件)。您可以做的最好的事情是检查是否存在@符号,并尝试向其发送确认电子邮件。如果成功,并且如果您收到回信,则表明该地址有效且有效。 -
@TimPietzcker 抱歉,我将正则表达式更改为实际的,它是原始表达式的混搭,也是我从 Oracle 文档中尝试过的。
标签: sql regex oracle oracle11g check-constraints