Oracle sql - 电子邮件地址验证

时间:2016-10-28 18:34:23

标签: regex email

全部,我在我的应用程序中有以下查询,我用它来检查有效和无效的电子邮件地址。输入字符串可以包含多个由半冒号分隔的电子邮件地址&#39 ;; 正则表达式涵盖了大多数有效的电子邮件,直到有人指向我的wiki链接(https://en.wikipedia.org/wiki/Email_address),其中有效电子邮件列表在我的查询中显示为无效。基本上从我从列表中观察到的,我看到的是用双引号括起来的任何字符集。 " '被视为有效的电子邮件地址,其中包含@和;等字符也(复制下面的列表)。此外,根据维基,DNS名称(.com或任何其他)也不是强制性的。

有人可以帮我提出正则表达式或任何其他方法来包括所有有效案件。

WITH EMAIL_ADDRESS AS  
(SELECT NVL(TRIM(REGEXP_SUBSTR('a@b.com;@n.com', '[^;]+', 1, LEVEL)), ' ') EMAIL_ID  
    FROM DUAL  
  CONNECT BY LEVEL <= REGEXP_COUNT(RTRIM('a@b.com;@n.com', ';'), ';') + 1)  
SELECT EMAIL_ID,  
       (CASE  
        WHEN REGEXP_INSTR(LOWER(EMAIL_ID),  
        '^[[:alnum:]'']+((\&|\.|\+|\-|_)[[:alnum:]'']+)?+@[[:alnum:]-]+((\.[a-z]{2,}){1,4})$') = 1 THEN  
         'Y'  
        ELSE  
         'N'  
       END) IS_VALID_EMAIL  
  FROM EMAIL_ADDRESS;  

EMAIL_ID       I  
--------------      -  
a@b.com        Y  
@n.com         N 

0 个答案:

没有答案