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