我需要检查一个字符串是否包含任何一个被禁止的单词.我的要求是:
stripos()我尝试过类似下面的内容
$string = "poker park is great";
if (stripos($string, 'poker||casino') === false)
{
echo "banned words found";
}
else
{
echo $string;
}
Run Code Online (Sandbox Code Playgroud)
使用preg_match匹配正则表达式:
$string = "poker park is great";
if (preg_match("/(poker|casino)/", $string)) {
echo "banned words found";
} else {
echo $string;
}
Run Code Online (Sandbox Code Playgroud)
更新:正如在评论和Mayur Relekar中所建议的那样,如果你希望你的匹配不区分大小写,你应该i为你的正则表达式添加一个标志.
并且,如果你想匹配单词(即"扑克"应该在单词边界之前和之后,例如空格,标点符号或文件结尾),你应该用你的匹配组\b. ..
所以:
...
if (preg_match("/\b(poker|casino)\b/i", $string)) {
...
Run Code Online (Sandbox Code Playgroud)
您可以使用数组并将其连接起来
$arr = array('poker','casino','some','other', 'word', 'regex+++*much/escaping()');
$string = 'cool guy';
for($i = 0, $l = count($arr); $i < $l; $i++) {
$arr[$i] = preg_quote($arr[$i], '/'); // Automagically escape regex tokens (think about quantifiers +*, [], () delimiters etc...)
}
//print_r($arr); // Check the results after escaping
if(preg_match('/\b(?:' . join('|', $arr). ')\b/i', $string)) { // now we don't need to fear
echo 'banned words found';
} else {
echo $string;
}
Run Code Online (Sandbox Code Playgroud)
它使用字边界并连接数组。