如何使用 REGEXP MySQL 函数查找超过 2 个点的电子邮件?
Posted
技术标签:
【中文标题】如何使用 REGEXP MySQL 函数查找超过 2 个点的电子邮件?【英文标题】:How to find email with more than 2 dots using REGEXP MySQL function? 【发布时间】:2012-04-03 12:15:41 【问题描述】:我有一个包含大量垃圾邮件帐户的大型用户数据库,例如 j.o.hnha.r.rold.t.ho.mp.so.n.j.u.n.io.r@gmail.com
或 o.f.vst.p.rqlsy.j@gmail.com
,我想通过一次查询将它们删除(而不是执行解析所有数据库的 php 脚本)。
我看到 mysql 有一个 REGEXP 函数,但很难将它与“点”一起使用。我尝试了很多类似的东西:
SELECT * FROM users WHERE email REGEXP '([[...]])2,'
SELECT * FROM users WHERE email REGEXP '(\\.)2,'
SELECT * FROM users WHERE email REGEXP '(.*)[[...]]2(.*)'
每一个都失败了。
有什么想法吗?
【问题讨论】:
2 个点?例如 joe.bloggs@example.co.uk 呢? (这个论点可以永远持续下去)。你为什么关心他们是否是垃圾邮件?f.o.o.b.a.r@gmail.com
转到与foobar@gmail.com
相同的帐户。
@Ben 我只想清理我的数据库。
@j0k 你怎么知道他们是垃圾邮件?当我希望能够预先过滤收到的邮件时,我经常在我的 gmail 地址中添加额外的点。 Gmail 在投递电子邮件时会去除电子邮件中的所有点。
【参考方案1】:
这个怎么样?
SELECT * FROM users WHERE email REGEXP '[.].*[.].*@';
这会在 @ 之前搜索两个(或更多)点(这仍然允许多点域名,如 .co.uk 等)。
但是,您应该考虑到某些用户的用户名中可能真的有多个点的可能性,这仍然是合法的。
【讨论】:
谢谢,我不会进行大规模的delete from
。【参考方案2】:
据我所知,这通常只是使用 gmail.com 帐户时的垃圾邮件问题。大多数带有多个点的合法用户名将类似于 jason.b.williams@gmail.com - 所以在其用户名中使用 3 个或更多点的垃圾邮件发送者 - 我将从我的数据库中删除,并且我将在注册过程中实施代码当使用 gmail 地址时,不允许在用户名中使用超过 2 个点。
SELECT user_email FROM users WHERE email REGEXP '[.].*[.].*[.].*@';
【讨论】:
为什么?请不要。 gmail 地址中的点数没有任何意义。我讨厌网站不允许我在我的 gmail 地址中添加“+”号,如果有任意规则阻止我在我的地址中添加额外的点,我会更讨厌它。跨度>以上是关于如何使用 REGEXP MySQL 函数查找超过 2 个点的电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章