全部,我在我的应用程序中有以下查询,我用它来检查有效和无效的电子邮件地址。输入字符串可以包含多个由半冒号分隔的电子邮件地址&#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