嗨,请帮助我,我正在使用此代码来过滤一些单词,但问题是它与确切的单词不匹配,而只是阻止包含我单词中字母的单词。
例如:“。com”我输入指挥官,这个词被阻止请帮忙。
$badwords = explode('|', 'http|www|.com');
foreach($badwords as $badword)
{
if(preg_match("/$badword/", $post->data['message'], $match))
{
$post->errors['badwords']['error_code'] = "Warning message goes here";
}
}
答案 0 :(得分:0)
您想要的行可能是
preg_match("/\b$badword\b/i", $post->data['message'], $match))
\b
表示不能用于形成单词的字母(请参阅here)。这可以防止com
与commander
或datacom
匹配。最后的i
使搜索不区分大小写。
此外,请注意,使用.com
作为您的一个坏词可能无法达到您想要的效果。句点字符(.
)与正则表达式中的任何单个字符匹配。相反,您想要搜索(\.
),这将实际匹配期间。 (有关时期特征的详细信息,请参阅here。)
最后,如果您要尝试匹配网址,可以查看this question。
答案 1 :(得分:0)
对于单词(我的意思是单词而不是.com等),这很简单
你只是想要pregmatch
'/\b' . $badword . '\b/'
\ b是单词边界
完全停止你必须逃脱它们。字面意思是它们(没有\它们实际上是正则表达式和正则表达式中的字符)所以我要么编写一个查找句号的函数,然后在它们之前添加一个\或者直接将它们添加到列表中,并且已经附加了\。 / p>