问题 发送无效的电子邮件地址


如何使用SELECT连续找到无效的电子邮件地址?


3951
2018-04-28 08:18


起源

定义无效? - duedl0r
该 只要 以100%确定性确定电子邮件地址有效性的方法是向其发送邮件。 - Charles
+1这是一个有效的问题,没有理由进行投票 - jcomeau_ictx
@jcomeau_ictx,您将如何回答这个问题? - Starx
@georgevich:定义 究竟 您希望如何验证电子邮件。这是您获得正确答案的唯一方式,对于如何正确验证电子邮件地址存在很多(有保证的)不同意见。 - Wesley Murch


答案:


SELECT
    email
FROM
    TABLE
WHERE
    email NOT LIKE '%_@_%._%'
AND email NOT LIKE '%list of invalid char%';

14
2018-04-28 08:20



!@#$%^&*.asdfsdafasd不是有效的电子邮件地址 - Michael Koper
+1我猜这是OP想要的。 - jcomeau_ictx
@Michael你是对的,但这是朝着正确方向迈出的一步。 - jcomeau_ictx
AND部分之后的所有内容都没有意义,首先我认为你的意思是电子邮件LIKE而第二个不是无效的字符,每个都需要自己的条款。 - Neo


SELECT email FROM tablename WHERE email NOT REGEXP '(^[a-z0-9]+)\@(.*)'

-1
2018-04-28 08:21



那个正则表达式太严格了。 - Wesley Murch
-1 local.part_can+be-more%complex@example.com 不同意你的看法。看看前鹦鹉臭名昭着(但大多数是正确的)正则表达式: ex-parrot.com/pdw/Mail-RFC822-Address.html - Piskvor
在某些方面过于严格,在其他方面过于宽松。 - Ignacio Vazquez-Abrams
也许是这样的? (^([^@\s]+)@((?:[-_a-z0-9]+\.)+[a-z]{2,})$)|(^$) - Michael Koper
omg,争论正确的正则表达式是没有意义的。大家都知道没有一个简单的解决方案。只是接受如何使用mysql处理它的理论方法,并找到适合您需要的正则表达式。 - duedl0r