PHP坏词过滤

时间:2018-03-14 11:43:12

标签: php filter preg-match preg-match-all

这是一个非常奇怪的情况,我们有一个坏词列表,所有工作都很完美,直到一个名为“Claudia”的客户试图提交表格:

context['request-id']

如果您尝试使用输入“Claudia”提交,如何使这个坏词检查工作?

但不是:

$blocked = ['audi','opel','vw','mercedes','porsche'];
$input = 'Claudia';
$matched = preg_match_all("/(".implode('|', $blocked).")/i", $input);


if($matched > 0) {
    echo "Your word: {$input} is blocked";
} else {
    echo "Your word: {$input} is OK";
}

... 或奥迪的任何其他变体?

1 个答案:

答案 0 :(得分:2)

您可以使用word boundary标记(\b)包围正则表达式,这会将其限制为匹配"整个"只有单词。将行更改为:

$matched = preg_match_all("/\b(".implode('|', $blocked).")\b/i", $input);

请参阅https://eval.in/971767