SQL Server中的模式匹配电子邮件地址

时间:2013-09-25 14:40:33

标签: sql sql-server sql-server-2005

我们在我们的数据库中收到欺诈性电子邮件,并且正在尝试发送警报以查找它们。我们收到的一些电子邮件地址示例:

addisonsdsdsdcfsd@XXXX.com
agustinasdsdfdf@XXXX.com

我希望查询搜索:
辅音和图案长度的图案> 4个字符

这是我到目前为止所做的,我无法弄清楚如何让它来搜索字符串的长度。现在它捕捉的地址甚至连两个辅音背靠背,我想避免因为它捕获了像bobsaget@xxxx.com这样的电子邮件。

select * from recips
where address like like '%[^aeiou]@%'

更新

我认为对我要查找的内容存在一些误解,这不是验证电子邮件的查询,我们只是想在我们的注册中发现欺诈性电子邮件的模式。

我们正在搜索除此之外的其他标准,例如datelastopened / clicked,但为了保持问题简单,我只附加了搜索模式的字符串。我们不会向不止一次硬弹的人发邮件。但是,这些电子邮件特别是机器人仍然可以找到点击/打开和不反弹的方法。它们也来自特定的IP块集,其中第一个八位字节是相同的,并且这些IP块会有所不同。

这绝不是我们的第一道防线,这只是为了确保我们能够抓住任何滑过裂缝的东西

1 个答案:

答案 0 :(得分:0)

我认为您当前的查询是 bobsaget@xxxxx.com ,因为它包含匹配[^aeiouy]@ t @ ,因为{之间的字符类} {1}}只匹配1个字符,除非您对其进行量化:[]

也许这样可行,但是我从谷歌搜索到在SQL-Server的[^aeiouy]{4,}@子句中使用Regex,你需要定义一个用户自定义函数来为你做这件事。如果这太麻烦了,也许做这样的事情可以解决问题:

WHERE

旁注,对我来说只有4个看起来很严格,我知道Heinsch是有效名字的语言。所以我认为我会考虑6个或更多,在这种情况下,它会WHERE address LIKE '%[^aeiouy][^aeiouy][^aeiouy][^aeiouy]@%' 或在上述查询中重复[^aeiouy]{6,}@部分6次。