2012-05-09 5 views
3

インターネットでこれを行う方法を探していますが、これは1単語でしか機能しません。文字列に複数の単語が含まれているかどうかを確認するPHPをチェックする

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

私が作ったコードですが、動作しませんでした。

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

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

誰かが私を助けることができたら、私はそれを感謝します。

+1

可能な重複:http://stackoverflow.com/q/1916261/259457 – Travesty3

+0

何誰かの名前は「ヤング」のときはどうですか? – Sampson

+1

==(0 == false)を使用しないとtrueが返されます。関数が複数の型を返す場合、strict(===、!==)を使用します。 –

答えて

6

は、アレイの使用

substr_count

は、以下の機能に

function substr_count_array($haystack, $needle) { 
    $count = 0; 
    foreach ($needle as $substring) { 
      $count += substr_count($haystack, $substring); 
    } 
    return $count; 
} 
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"; 
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"; } 
+0

(strpos($ bad_word、$ sentence)!== false){ $ match = true; 休憩。 } – Liam

0
<?php 
function isUserNameCorrect() 
{ 
    Foreach($badname in $badnames) 
    { 
     if(strstr($badname, $enteredname) == false) 
     { 
      return false; 
     } 
    } 
    return true; 
} 

多分これが

+0

解決方法は次の問題には適していません。ユーザータイプが 'ifoolyou!'の場合、不正な単語 'fool'は検出されません。 (あなたはまた、部分一致を考える必要があり –

0

Iを使用することができます:あなたはそれを次のように行うことができます信念電子文は、複数の単一の単語

残念ながら、あなたが直接関数strpos /はstrstrにArrayを与えることができない

$badwords = array("yo","hi"); 
$string = "i am yo this is testing"; 
$word = array_intersect($badwords,explode(" " , $string)); 
if(empty($word)) 
{ 
    echo "Sucess" ; 
} 
0

してみています。 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"; 
} 
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"; 
} 

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

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 
+0

関数stringTesterを()が見つからない –

+0

遅延 – ffdigital

+0

'関数stringTester($飼料、$ strTest) { \t $ processedFeed =ノーマライズ($フィード)申し訳ありません;。? \t $ processedTest =($ strTest)を正規化する。\t \t \t \t $のPOS =のstrpos($ processedFeed、$ processedTest); \t \t \t場合($ POS ===偽){// \t ===偽\t \t \t \t \t //e "$ WORD" $ strTest "NOT FOUND
"; \t \t \t \t return false; \t \t}他{ \t \t \t //ますprint_r($ licitaToFilter)。 \t \t \t \t //エコー "WORD"。 $ strTest。 "FOUND IN
"; \t \t //エコー "IS ON LINE"。$ pos; \t \t \t \t return true; \t \t} \t } ' – ffdigital

関連する問題