2011-01-31 94 views
0

我正在尝试构建自制垃圾邮件过滤器。并且想写一个正则表达式来匹配下面的模式。我怎样才能做到这一点?谢谢。如何在PHP中匹配这种随机字符串?

UBmDNFZGrvtbFtxWMq

但这些种用空格或数字。

$ 800

不确定

我对用户输入的反馈,这样的事情的一种形式。我正在尝试检测垃圾邮件。我尝试使用谷歌reCaptcha网络服务。但看起来难度很高,我不喜欢那样。我认为如果用户第一次输入错误,它会再次阻止一些用户输入。我还尝试了一些跨筛选Web服务供应商,但它看起来像用户消息将发送到他们的服务器。我对此感到不自在。

所以我想出了一个构建一个patten匹配函数来验证一些用户输入表单值的想法。这个问题是我想要匹配的模式之一。

+1

到目前为止您尝试了哪些方法? – 2011-01-31 20:47:35

+3

描述一下你试图匹配/不匹配 – justintime 2011-01-31 20:47:46

回答

6

我不打扰试图制作垃圾邮件过滤器。这个问题已被很多其他人解决,如SpamAssassin

但是解决办法可能是这个样子的正则表达式来检测字母的长字符串:

/\b[A-Za-z]{18,}\b/ 

细化,以避免合法的18个字母的单词的错误匹配是检查的东西,很少发生于正常也就是说,如大写字母小写字母后存在的:

/(?:[A-Z]*[a-z]+[A-Z])[A-Za-z]{18,}\b/ 

这仍然可能会给一些错误的匹配(例如命名为“垃圾杀手”只是几个字母总之这个正则表达式匹配的)。它将为您提供的示例和大多数普通文本正确工作 - 但代码示例不太好。

垃圾邮件检测通常使用许多更复杂的技术,无法单独使用正则表达式进行复制。查看其他指标(如每个字母的字母频率)并检查该单词是否在字典中找到可能会更好。通常没有单一的技术可以给出良好的结果 - 技术要求的组合需要每个技术得分。如果一封电子邮件触发了太多高分的规则,那么它会被标记为垃圾邮件,但是如果它只触及一些低分的规则,那么它可能是可以接受的。评分系统可以由用户配置。

编辑:关于问题的更新,因为这是用于在Web表单上输入数据的,所以防止垃圾邮件的一种标准方法是使用CAPTCHA,如reCAPTCHA