如何检查单词是否在数组中然后返回匹配的单词

时间:2014-03-25 04:24:36

标签: php regex arrays filter compare

问题1

我正在使用以下内容检查某些输入元素中的错误单词,并且我想告诉用户不允许在其文本上使用哪个单词。如何从匹配它的数组中获取特定的单词?当用户输入多个坏词时,这只会检测到第一个单词并忽略其余单词。

问题2

如何忽略大小写,此代码无法识别“John”“john”。我不知道这是否是一个正则表达式的工作。如果这个方法很弱,请另辟蹊径。 的 PHP

$BadWords = array("James", "June", "Jane");
if (in_array($comment, $BadWords)){
    echo 'No way... that is not allowed lol...';
}

问题3 速度

假设我有大约2000个单词来比较一个单词,哪个方法最好在没有滥用资源的情况下更快地完成此过程,同时考虑到过滤坏单词只是一个例子,因为这不仅限于检查坏词和在所有情况下都不考虑数据库。

感谢。

3 个答案:

答案 0 :(得分:1)

使用array_search从密钥中获取匹配的字词

 <?php
$comment="James";
$BadWords = array("James", "June", "Jane");
$bwords = array_map('strtoupper',$BadWords);
if (in_array(strtoupper($comment), $bwords)){
    $k=array_search($comment,$bwords);
    echo $BadWords[$k]."\n";
    echo 'No way... that is not allowed lol...';
}

答案 1 :(得分:1)

结合上述两个答案,这将检测是否存在多个badword,以及它是否与任何其他字符串连接:

$comment="James junexyz";
$BadWords = array("James", "June", "Jane");
foreach($BadWords as $k=>$v){
    $pos = stripos($comment,$v);
    if($pos!==false){
        echo $v. ' is not allowed'.'<br>';
    }
}

<强> Demo

答案 2 :(得分:0)

你可以使用下面的代码片段来处理大小写

$comment="James"; // 'james'
$BadWords = array("James", "June", "Jane");
$lowerCap = array_map('strtolower', $BadWords);
  if (in_array(strtolower($comment), $lowerCap)){
    $k=array_search($comment,$lowerCap );
    echo $BadWords[$k]."\n";
    echo 'No way... that is not allowed lol...';
}