2017-02-01 10 views
0

文字列に単語のグループが含まれているかどうかを検出する方法があるかどうかをご確認したいと思います。PHP 「暴行」と言うことは許されているが、「暴行+ライフル」はそうではないとしよう。だから... ...単語のグループが検出されたかどうかの検出

"I saw an assault"

"I bought an assault rifle"を検出すべきではない

"I assaulted a bank with my rifle"

+0

信頼できることは何もありません。特定のフレーズのすべての単語がターゲット文字列内に存在することを確認することはできますが、それでもやはり厳密すぎる(「攻撃」には 'assault'が含まれていると仮定しますが、' grape'という単語私は実際にどこかで見たことがある)か、あまりにも寛大である(完全な言葉にしかマッチしないが、暴行 - >暴行や暴行のような有効なバリエーションがない)。また、これらのどちらも 'assauIt'のような文字の置換を止めませんでした。' L'は大文字の 'i'(セーブ後のダンセリフフォント)に置き換えられました。 –

+0

ありがとう、たくさん! –

答えて

2

一般的な方法は、その後、"+" sが入力された文字列(すなわち"assault+rifle")を分割するだろう必要があるはずですそれらのそれぞれのために、それが元のテキストにあるかどうか確認してください。

// Assuming: 
$text; 
$words; 

// Iterating through the splitted $words 
foreach(explode("+", $words) as &$word) { 
    // Checking if the text contains our word 
    if (strpos($text, $word) === false)) { 
     die("Allowed"); 
    } 
} 
echo "Not Allowed"; 
+0

この例は、最初に見つかった単語で停止します。すべての単語が見つからない場合は停止します。 –

+0

修正を提案しますか? @JonathanKuhn –

+2

関数にラップし、各単語にループし、見つからない場合はfalseを返します。そうでなければ、すべてが見つかって真実に戻ります。あなたのコンセプトは正しいですが、個々の単語を個別にチェックする必要がありますが、許可されていないとみなす前にすべての単語がすべて存在することを確認する必要があります。 –

関連する問題