我正在试图找出preg_match()的正则表达式,它将在以下所有场景中返回true:
1-为这样做的人留下空间“看看我的网站.com(没有空格)”
2-在“check out mywebsite.com”中找到明显的“mywebsite.com”
3-找到点替换“查看mywebsite dot com(无空格)”
4-不区分大小写
答案 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";
}