这个问题已经在这里有了答案:
已关闭8年。
我想检查一个字符串是否包含以下任何单词:禁止,错误,用户,通过,堆栈,名称,html。
如果包含任何单词,我需要回显坏单词的数量
str = 'Hello my name is user';
最佳答案
我认为这样会起作用:
$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>";
}
这将创建一个禁止单词数组,并使用regular expression查找这些单词的实例:
正则表达式中的
\b
指示单词边界(即单词的开头或结尾,由字符串的开头/结尾或非单词字符确定)。这样做是为了防止"clbuttic" mistakes-也就是说,当您只想匹配单词“ban”时,您不想禁用单词“banner”。 implode
函数创建一个字符串,其中包含您所有禁止的单词,并用竖线字符分隔,即正则表达式中的or
运算符。 implode
部分用括号括起来,因此 preg_match_all
将捕获被禁止的单词作为匹配项。 i
修饰符表示匹配应区分大小写-即,它将匹配每个单词,而不考虑大小写-“Ban,” ban“和” BAN“都将与单词” ban“匹配在$badWords
数组中。接下来,代码检查是否找到任何匹配项。如果存在,它将使用
array_unique
来确保仅报告每个单词的一个实例,然后以无序列表的形式输出匹配项列表。这是您要找的东西吗?