47

文字列に複数の特定の単語が含まれているかどうかを確認する方法は?

次のコードを使用して、単一の単語を確認できます。

$data = "text text text text text text text bad text text naughty";
if (strpos($data, 'bad') !== false) {
    echo 'true';
}

しかし、チェックする単語をさらに追加したいと思います。このようなもの:

$data = "text text text text text text text bad text text naughty";
if (strpos($data, 'bad || naughty') !== false) {
    echo 'true';
}

(これらの単語のいずれかが見つかった場合は、true を返す必要があります)

しかし、上記のコードは正しく動作しません。私が間違っていることは何ですか?

4

7 に答える 7

84

これには、正規表現preg_match関数が必要です。

何かのようなもの:

if(preg_match('(bad|naughty)', $data) === 1) { } 

試みがうまくいかなかった理由

正規表現は、PHP 正規表現エンジンによって解析されます。構文の問題は、||演算子を使用したことです。これは正規表現演算子ではないため、文字列の一部としてカウントされます。

上で正しく述べたように、それが一致しようとしている文字列の一部としてカウントされている場合:'bad || naughty'式ではなく文字列として!

于 2013-04-07T12:31:38.720 に答える
33

次のようなことはできません。

if (strpos($data, 'bad || naughty') !== false) {

代わりに、次の正規表現を使用できます。

if(preg_match("/(bad|naughty|other)/i", $data)){
 //one of these string found
}
于 2013-04-07T12:30:41.053 に答える
2

各単語をストポーズする必要があります。今、次のような文字列があるかどうかを確認しています

'bad || naughty'

存在しません。

于 2013-04-07T12:30:48.817 に答える