Это очень странная ситуация, у нас есть список плохих слов, и все работало отлично, пока клиент по имени «Клаудиа» не попытался отправить форму:

$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";
}

Как заставить эту проверку плохих слов работать, даже если вы пытаетесь отправить с вводом "Клаудиа"?

Но НЕ с:

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

... Или какие-то другие вариации с ауди?

0
lewis4u 14 Мар 2018 в 14:43

1 ответ

Лучший ответ

Вы можете окружить регулярное выражение маркерами границы слова (\b), что ограничит его сопоставлением только "целых" слов. Измените строку на:

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

См. https://eval.in/971767.

2
iainn 14 Мар 2018 в 14:48