【问题标题】:How to check if word is in array then return the matched word如何检查单词是否在数组中然后返回匹配的单词
【发布时间】:2014-05-02 18:06:54
【问题描述】:

问题 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 个单词要与一个单词进行比较,哪种方法最好在不滥用资源的情况下更快地完成此过程,同时考虑到过滤坏词只是一个示例,因为这不仅限于检查坏词和在所有情况下都不考虑数据库。

谢谢。

【问题讨论】:

  • 绝对不是 regex 工作。假设你的数组上的脏词是 rascal,如果用户键入 damn rascal 那么你的代码就会失败。
  • 实际想想,你刚才提到的大概有 2000 个字,现在举个例子。 2000字里有10个不好的字,你会不会只显示1个不允许的字,让他改正提交,然后再显示下一个?
  • 你建议我做什么?
  • @user3109875 根据用户体验,最好将它们一起提交,并说“cmets 中不允许以下词:”,然后是列表。那么他们知道所有不允许的内容并一次性纠正吗?
  • 这就是我想做的,但我不知道如何编码。

标签: php regex arrays filter compare


【解决方案1】:

使用array_search从key中获取匹配的单词

 <?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...';
}

【讨论】:

  • 我喜欢这个,我们可以让它不区分大小写吗?
【解决方案2】:

你可以在sn-p下面使用它可以工作小写和大写

$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...';
}

【讨论】:

    【解决方案3】:

    结合以上两个答案,这将检测是否有多个坏词以及是否与任何其他字符串连接:

    $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

    【讨论】:

    • 是的,这会检查多个单词,但 for_each 会向用户返回多个回复。如发现两个坏词。您将看到“不允许使用 James。不允许使用 junexyz。”请检查一下。
    • @user3109875 如果用户确实输入了多个坏词怎么办?您想一次只显示 1 个吗?在echo 之后使用break;
    • @user3109875,如果你继续编辑你的问题,你永远不会得到完美的答案。坐下来,放松一下,慢慢来..根据您的所有要求准备您的问题,然后发布!
    猜你喜欢
    • 2021-08-18
    • 2018-02-28
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 2015-11-17
    相关资源
    最近更新 更多