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

时间:2014-12-16 08:10:37

标签: php regex

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

  1. 不区分大小写,这就是我使用stripos()
  2. 的原因
  3. 单词应该用空格分隔,例如,如果被禁止的单词是"扑克","扑克游戏"或者"游戏扑克比赛"应该受到禁止的字符串和#34; trainpokering great"应该是好的字符串。
  4. 我尝试了类似下面的内容

    $string  = "poker park is great";
    
    if (stripos($string, 'poker||casino') === false) 
    {
    
    echo "banned words found";
    }
    else
    
    {
    echo $string;
    }
    

4 个答案:

答案 0 :(得分:6)

使用preg_match匹配正则表达式:

$string  = "poker park is great";

if (preg_match("/(poker|casino)/", $string)) {
  echo "banned words found";
} else {
  echo $string;
}

更新:根据评论和Mayur Relekar的回答,如果您希望匹配不区分大小写,则应在正则表达式中添加i标记。
并且,如果你想匹配单词(即"扑克"应该在单词边界之前和之后,例如空格,标点符号或结尾-file),你应该用\b ...包围你的匹配组 所以:

...
if (preg_match("/\b(poker|casino)\b/i", $string)) {
...

答案 1 :(得分:1)

MarcoS是对的,除了在你的情况下你需要匹配确切的字符串而不是未绑定的字符串。为此,您需要为要完全匹配的字符串添加前缀和后缀\b\b是单词分隔符)。

$string  = "poker park is great";
if (preg_match("/\bpoker\b/", $string)) {
    echo "banned words found";
} else {
    echo $string;
}

答案 2 :(得分: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;
}

它使用单词边界并连接数组。

答案 3 :(得分:0)

$string  = "park doing great with pokering. casino is too dangerous.";
$needles = array("poker","casino");
foreach($needles as $needle){
  if (preg_match("/\b".$needle."\b/", $string)) {
    echo "banned words found";
    die;
  }
}
echo $string;
die;