坏词过滤问题

时间:2015-03-24 02:39:54

标签: php regex

我遇到了这个坏词防止代码的问题。如果我将其保留在下面,代码将说"不允许使用bad1这个词"无论我输入什么。 如果我使用$ entry变量删除下面的第4行,那么代码会让所有内容都通过,甚至是bad1。

我们的目标是匹配像' are'这样的词,但不匹配' care'

if (isset($_POST['text'])) {

// delete the line below in your code
$entry = "notbad1word bad1 bad notbad1.";

$disallowedWords = array(
'bad1',
'bad2',
);

foreach ($disallowedWords as $word)
{ // use $_POST['text'] instead of $entry
preg_match("#\b". $word ."\b#", $entry, $matches); 
if(!empty($matches))
    die("The word " . $word . " is not allowed.&nbsp;&nbsp;<b><a
 href=\"javascript:history.back();\">Go Back</a></b>");
}
}

下面的代码工作正常,是我最初接受的答案(我可以坚持这一点,但它不会为内部匹配做任何事情,我不认为)。无论如何,如果没有快速解决方案,我将满足于我最初接受的以下答案:

if (isset($_POST['text'])) {

// Words not allowed
$disallowedWords = array(
    'bad1',
    'bad2',
);

$pattern = sprintf('/(%s)/i', implode('|',$disallowedWords));
$subject = $_POST['text'];
if (preg_match($pattern, $subject, $token)) {
    die(sprintf("The word '%s' is not allowed. &nbsp;&nbsp;<b><a
 href=\"javascript:history.back();\">Go Back</a></b>\n", $token[1]));
}
}

0 个答案:

没有答案