验证sql/oracle中的电子邮件/邮政编码字段

3 sql oracle plsql constraints

非常感谢以下的一些建议 - 是否可以通过oracle中的sql中的某种检查约束来验证电子邮件和邮政编码字段?或者这种事情,因为我怀疑pl/sql与正则表达式?

谢谢

Nei*_*ner 8

这是电子邮件地址的regexp语法,包括引号

'[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}'
Run Code Online (Sandbox Code Playgroud)

因此,您可以在where子句或regexp_substr()中使用regexp_like()来检查您的字段是否包含有效的电子邮件地址.这是一个示例 - 您将看到regexp_substr()在缺少.domain的地址上返回NULL,这会使子字符串验证失败.从那里你可以围绕它构建一个检查约束,或者使用触发器(yuck)等强制执行它.

SQL> desc email
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMAIL_ID                                           NUMBER
 EMAIL_ADDRESS                                      VARCHAR2(128)


SQL> select * from email;

  EMAIL_ID EMAIL_ADDRESS
---------- ----------------------------------------
         1 NEIL@GMAIL.COM
         2 JOE@UTAH.GOV
         3 lower_name@lower.org
         4 bad_address@missing_domaindotorg


SQL> @qry2
SQL> column email_address format a40
SQL> column substr_result format a30
SQL> SELECT  email_address
  2       ,  regexp_substr(email_address,'[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}') substr_result
  3    FROM  email
  4  /

EMAIL_ADDRESS                            SUBSTR_RESULT
---------------------------------------- ------------------------------
NEIL@GMAIL.COM                           NEIL@GMAIL.COM
JOE@UTAH.GOV                             JOE@UTAH.GOV
lower_name@lower.org                     lower_name@lower.org
bad_address@missing_domaindotorg
Run Code Online (Sandbox Code Playgroud)

使用相同的数据,这是一个使用REGEXP_LIKE限制仅有效电子邮件地址的查询

SQL> column email_address format a40
SQL> column substr_result format a30
SQL> SELECT  email_address
  2    FROM  email
  3   WHERE  REGEXP_LIKE (email_address, '[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}');

EMAIL_ADDRESS
----------------------------------------
NEIL@GMAIL.COM
JOE@UTAH.GOV
lower_name@lower.org
Run Code Online (Sandbox Code Playgroud)

搜索SQL参考的内容页面以获取正则表达式以查看正则表达式支持.

  • 该正则表达式不适用于使用.museum和.travel顶级域名的电子邮件地址. (2认同)

小智 6

更好的正则表达式是:

^[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,4}$
Run Code Online (Sandbox Code Playgroud)

(给出相同的表达式,但锚定到行的开始(^)和结束($))

如果没有锚点,诸如“test1@hotmail.com some other text”之类的表达式将被验证,如果您尝试验证一封电子邮件,则上述字符串不应验证

注意:电子邮件应事先修剪,以便前导或尾随空格不会破坏验证。

希望能帮助到你,


dpb*_*ley 1

如果您只关心美国,则可以以平面文件格式获取多种邮政编码来源并将其导入表中,然后将地址中的外键约束应用于该表。

电子邮件地址可以与正则表达式(需要 10g 或更高)进行匹配以验证格式,但检查它们是否是实际地址是一项困难得多的任务。