检查数组中的任何字符串是否与字符串匹配

时间:2011-05-25 21:30:43

标签: php

我试图找出一个字符串是否匹配我的数组IE中的任何坏词:

$badWords = Array('bad', 'words', 'go', 'here');
$strToCheck = "checking this string if any of the bad words appear";

if (strpos($strToCheck, $badWords)) { 
    // bad word found
}

问题是strpos只能检查一个字符串而不是一个数组,是否有一种方法可以在不循环遍历badwords数组的情况下执行此操作?

4 个答案:

答案 0 :(得分:3)

不完全是,因为所有解决方案都不可避免地必须遍历您的阵列,即使它是“幕后”。您可以使用$ badWords创建正则表达式,但运行时复杂性可能不会受到影响。无论如何,这是我的正则表达式建议:

$badWordsEscaped = array_map('preg_quote', $badWords);
$regex = '/'.implode('|', $badWordsEscaped).'/';
if(preg_match($regex, $strToCheck)) {
  //bad word found
}

请注意,如果它们包含任何特殊的正则表达式字符,例如/.

,我就会转义这些字以防止正则表达式注入

答案 1 :(得分:2)

array_intersect()为您提供匹配单词列表:

if (count(array_intersect(preg_split('/\s+/', $strToCheck), $badWords))) {
    // ...
}

答案 2 :(得分:0)

<击> in_array 读错了。

最简单的实现是为每个坏词调用strpos():

<?php
$ok = TRUE;
foreach($badwords AS $word)
{
    if( strpos($strToCheck, $word) )
    {
        $ok = FALSE;
        break;
    }
}
?>

答案 3 :(得分:0)

试试这个..

$badWords = array('hello','bad', 'words', 'go', 'here');
$strToCheck = 'i am string to check and see if i can find any bad words here';
//Convert String to an array
$strToCheck = explode(' ',$strToCheck);

foreach($badWords as $bad) {
    if(in_array($bad, $strToCheck)) {
        echo $bad.'<br/>';
    }
}

上面的代码将返回所有匹配的坏词,你可以进一步扩展它来实现你自己的逻辑,比如替换坏词等。