2015-09-13 27 views
8

文字列と配列の間に部分一致が存在しないようにするにはどうすればよいですか?部分一致文字列に対するPHPマッチ配列

今私は、構文を使用しています:$ OPERATING_SYSTEMの値が余分な詳細を持っており、だけボット、クロールやクモになることはありません

if (!array_search($operating_system , $exclude)) { 

を。

例として$ OPERATING_SYSTEMの値

"Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)" 

$が除外されるが、私はボットが含まれているためIFを失敗するために、この例のようになる不要なアイテムの配列

$exclude = [ 
    'bot', 
    'crawl', 
    'spider' 
]; 

です文字列とは配列要素です。

+4

は、正規表現を使用します文字列リストの代わりに。 – mario

答えて

3

このコードはうまく機能するはずです。

最初のパラメータとしてユーザエージェント文字列を、2番目のパラメータとして除外するテキストの配列を指定して、arraySearch関数を呼び出してください。配列内のテキストは、ユーザーエージェント文字列に発見された場合、この関数は1を返します。それ以外の場合は、単純な正規表現のソリューションです。ここは0

function arraySearch($operating_system, $exclude){ 
    if (is_array($exclude)){ 
     foreach ($exclude as $badtags){ 
      if (strpos($operating_system,$badtags) > -1){ 
       return 1; 
      } 
     } 
    } 
    return 0; 
} 
3

を返します。

<?php 
$operating_system = 'Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)'; 
$exclude = array('bot', 'crawl', 'spider'); 

$re_pattern = '#'.implode('|', $exclude).'#'; // create the regex pattern 
if (!preg_match($re_pattern, $operating_system)) 
    echo 'No excludes found in the subject string !)'; 
else echo 'There are some excludes in the subject string :o'; 
?> 
+1

_case insensitive_と一致させたい場合は、2番目の '#'の後ろに単に 'i'文字を挿入してください:) – someOne

関連する問題