检查字符串是否包含任何单词

Dev*_*ami 4 php regex

我需要检查一个字符串是否包含任何一个被禁止的单词.我的要求是:

  1. 不区分大小写这就是我使用的原因 stripos()
  2. 单词应该用空格分隔,例如,如果被禁止的单词是"扑克","扑克游戏"或"游戏扑克比赛"应该被禁止的字符串和"trainpokering great"应该在良好的字符串下.

我尝试过类似下面的内容

$string  = "poker park is great";

if (stripos($string, 'poker||casino') === false) 
{

echo "banned words found";
}
else

{
echo $string;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*coS 6

使用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)


Ami*_*oki 0

您可以使用数组并将其连接起来

$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)

它使用字边界并连接数组。