可能重复:
为某些单词测试字符串的有效方法
我想检查字符串是否包含以下任何单词: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确保仅报告每个单词的一个实例,然后它在无序列表中输出匹配列表.
这是你在找什么?
| 归档时间: |
|
| 查看次数: |
14501 次 |
| 最近记录: |