PHP 坏词过滤

PHP Bad word filtering

这是一个非常奇怪的情况,我们有一个坏词列表并且一切正常,直到一位名叫 "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";
}

如果您尝试使用输入 "Claudia" 提交,如何使这个坏词检查器也能正常工作?

但不包括:

"my audi"
"-audi-"
"**audi**"

... 或者 audi 的任何其他变体?

您可以用 word boundary 标记 (\b) 将正则表达式括起来,这会将其限制为仅匹配 "whole" 个单词。将行更改为:

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

https://eval.in/971767