如何在PHP中匹配这种随机字符串?

时间:2011-01-31 20:44:58

标签: php regex preg-match

我正在尝试构建一个自制垃圾邮件过滤器。并且想要编写正则表达式以匹配以下模式。我怎样才能做到这一点?感谢。

  

UBmDNFZGrvtbFtxWMq

但不是这种空格或数字。

  

$ 800

     

不确定

我有一个用户输入反馈的表单,就像那样。我正在尝试检测垃圾邮件。我尝试使用谷歌reCaptcha网络服务。但似乎困难程度很高,我不喜欢这样。如果用户第一次输入错误,我认为它会再次停止一些用户输入。我也尝试了一些span过滤器Web服务供应商,但它看起来像用户消息将发送到他们的服务器。我对此感到不舒服。

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

1 个答案:

答案 0 :(得分:6)

我不打算尝试制作垃圾邮件过滤器。许多其他问题已经很好地解决了这个问题,例如SpamAssassin

然而,解决方案可能看起来像这个正则表达式来检测一长串字母:

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

避免对合法的18个字母单词进行错误匹配的改进是检查普通单词中很少出现的内容,例如在小写字母后出现的大写字母:

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

这可能仍然会给出一些错误的匹配(例如,名称“SpamAssassin”只是与该正则表达式匹配的几个字母)。它对于您提供的示例和大多数普通文本都能正常工作 - 但对代码示例来说效果不太好。

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

编辑:关于问题的更新,由于这是用于在网络表单上输入数据,防止垃圾邮件的标准方法之一是使用CAPTCHA,例如reCAPTCHA