检查字符串是否有坏词?

And*_*ara 2 php

可能重复:
为某些单词测试字符串的有效方法

我想检查字符串是否包含以下任何单词:ban,bad,user,pass,stack,name,html.

如果它包含我需要回答的坏词数量的任何单词

str = 'Hello my name is user';
Run Code Online (Sandbox Code Playgroud)

Age*_*rum 23

我觉得这样的事情会起作用:

$badWords = array("ban","bad","user","pass","stack","name","html");

$string = "Hello my name is user.";

$matches = array();
$matchFound = preg_match_all(
                "/\b(" . implode($badWords,"|") . ")\b/i", 
                $string, 
                $matches
              );

if ($matchFound) {
  $words = array_unique($matches[0]);
  foreach($words as $word) {
    echo "<li>" . $word . "</li>";
  }
  echo "</ul>";
}
Run Code Online (Sandbox Code Playgroud)

这会创建一系列禁止的单词,并使用正则表达式来查找这些单词的实例:

  • \b在正则表达式中表示单词边界(即单词的开头或结尾,由字符串的开头/结尾或非单词字符决定).这样做是为了防止"clbuttic"错误 - 也就是说,当你只想匹配"禁令"这个词时,你不想禁止使用"banner"这个词.

  • implode函数创建一个包含所有禁止单词的字符串,由管道or符号分隔,管道符号是正则表达式中的运算符.

  • implode则表达式的部分用括号括起来,以便preg_match_all将禁止的单词捕获为匹配.

  • i则表达式末尾的修饰符表示匹配应区分大小写 - 即它将匹配每个单词而不管大小写 - "禁止","禁止"和"BAN"都将匹配"禁止"中的单词$badWords阵列.

接下来,代码检查是否找到任何匹配项.如果有,它用于array_unique确保仅报告每个单词的一个实例,然后它在无序列表中输出匹配列表.

这是你在找什么?