正则表达式检查垃圾邮件发送者

时间:2015-03-23 03:48:48

标签: php regex

我正在试图找出preg_match()的正则表达式,它将在以下所有场景中返回true:

1-为这样做的人留下空间“看看我的网站.com(没有空格)”

2-在“check out mywebsite.com”中找到明显的“mywebsite.com”

3-找到点替换“查看mywebsite dot com(无空格)”

4-不区分大小写

1 个答案:

答案 0 :(得分:0)

这对你有用吗?我认为你将来必须修改它,但是为了粗略的实现(你要求的)它应该工作。我还假设你的“签出我的”是必填文本,如果不能删除。 \s*表示任意数量的空格; \w*表示任意数量的单词字符(a-z,0-9和/或下划线)。 |表示“或”,()对“或”应影响的两个值进行分组。如果您有任何疑问,请询问。最外面的括号组是潜在的域。您可能想要将\w*更改为\w+,但我认为如果他们说“查看我的.com”,您也想要过滤它...

if(preg_match('~check\s*out\s*my\s*(\w*\s*(\.|dot)\s*com)~i', $input, $domain)) {
     echo 'This is spam?';
}

基于您的实际代码的解决方案:

<?php
$spamCount=0;
$input=preg_replace(array('~\s*~', '~dot~i'), array('', '.'), 'Hi. Please see my website at "test domain . com" (no spaces) anothertest dot com');
$checkTheseDomains = array("testdomain.com","anothertest.com");
foreach($checkTheseDomains as $domain) {
    if(strpos($input, $domain) !== false) {
        $spamCount++;
    }
}
if($spamCount > 0){
        echo "Spam count of  <b>".$spamCount."</b>";
}else{
        echo "No spam";
}