3

私はこれを行う何かをインターネットで探しましたが、それは一言でしか機能しません。

サイトの不正なユーザー名を検出するスクリプトを作成しようとしています。ユーザー名に配列内の単語のいずれかが含まれている場合、不正なユーザー名が検出されます。

これが私が作成したコードですが、機能しませんでした。

$bad_words = array("yo","hi");
$sentence = "yo";

if (strpos($bad_words,$sentence)==false) {
echo "success";
}

誰かが私を助けてくれるなら、私はそれをいただければ幸いです。

4

8 に答える 8

7

使用する

substr_count

配列の場合、次の関数を使用します

function substr_count_array( $haystack, $needle ) {
     $count = 0;
     foreach ($needle as $substring) {
          $count += substr_count( $haystack, $substring);
     }
     return $count;
}
于 2012-05-09T14:49:40.497 に答える
1

次のコードを使用できます。

$bad_words = array("yo","hi");
$sentence = "yo you your";
// break your sentence into words first
preg_match_all('/\w+/', $sentence, $m);
echo ( array_diff ( $m[0], $bad_words ) === $m[0] ) ? "no bad words found\n" :
                                                      "bad words found\n";
于 2012-05-09T14:46:13.787 に答える
1
// returns false or true
function multiStringTester($feed , $arrayTest)
{   
    $validator = false;
    for ($i = 0; $i < count($arrayTest); $i++) 
    {
            if (stringTester($feed, $arrayTest[$i]) === false ) 
            {   
                continue;
            } else 
            {
                $validator = true;              
            }       
    }
    return $validator;
}
//www.ffdigital.net
于 2012-09-19T04:05:30.647 に答える
0

私はこれを次のように実装します:

$bad_words = array("yo","hi");
$sentence = "yo";

$valid = true;
foreach ($bad_words as $bad_word) {
    if (strpos($sentence, $bad_word) !== false) {
        $valid = false;
        break;
    }
}

if ($valid) {
    echo "success";
}

からの単語が少なくとも1つ含まれていない限り、文は有効です$bad_words。厳密なチェック(つまり)に注意してください。これがないと、結果がfalseではなく0!==の場合にチェックが失敗します。strpos

于 2012-05-09T15:50:34.737 に答える
0
<?php
function isUserNameCorrect()
{
    Foreach($badname in $badnames)
    {
        if(strstr($badname, $enteredname) == false)
        {
             return false;
        }
    }
    return true;
}

多分これは役立ちます

于 2012-05-09T14:49:13.167 に答える
0

あなたは近くにいます。次の方法で実行できます。

$bad_words = array("yo","hi");
$sentence = "yo";
$match = false;
foreach($bad_words as $bad_word) {
  if (strpos($bad_word,$sentence) === false) {  # use $bad_word, not $bad_words
    $match = true;
    break;
  }
}
if($match) { echo "success"; }
于 2012-05-09T14:48:13.073 に答える
0

Array残念ながら、関数strpos/strstrに直接を与えることはできません。

PHP.netのコメントによると、これを行うには、次のような関数を使用する(または必要に応じて独自に作成する)必要があります。

function strstr_array($haystack, $needle) 
{
     if ( !is_array( $haystack ) ) {
         return false;
     }
     foreach ( $haystack as $element ) {
         if ( stristr( $element, $needle ) ) {
             return $element;
         }
     }
}

次に、strpos新しい関数に変更します- strstr_array

$bad_words = array("yo","hi");
$sentence = "yo";

if (strstr_array($bad_words,$sentence)==false) {
     echo "success";
}
于 2012-05-09T15:05:27.520 に答える
0

文は一言以上だと思います

試す

$badwords = array("yo","hi");
$string  = "i am yo this is testing";
$word = array_intersect( $badwords,explode(" " , $string));
if(empty($word))
{
    echo "Sucess" ;
}
于 2012-05-09T14:55:57.100 に答える