2012-01-11 17 views
0

コンテンツを正しく表示するために使用しているモバイルデバイスのリストがあります。減価償却された関数は次のようになります。eregとpregを正しく置き換える方法

function detectPDA($query){ 
    $browserAgent = $_SERVER['HTTP_USER_AGENT']; 
    $userAgents = $this->getBrowserAgentsToDetect(); // comma separated list of devices 
    foreach ($userAgents as $userAgent) { 
     if(eregi($userAgent,$browserAgent)){ 
      if(eregi("iphone",$browserAgent) || eregi("ipod",$browserAgent)){ 
       $this->iphone = true; 
      }else{ 
       $this->pda = true; 
      } 
     } 
    } 
} 

eregi関数を置き換える正しい方法は何ですか?

答えて

0

すべてのパターン文字列($userAgentiphone)は、あなただけのスラッシュ(/)を持つeregi正規表現を囲む、特殊な正規表現文字(()[]!|.^${}?*+)を含んでおり、意味している(最後のスラッシュの後にiを追加しないように、信頼できる場合"大文字小文字を区別しません")。

ので:しかし

eregi($userAgent,$browserAgent) --> preg_match("/$userAgent/i",$browserAgent) 
eregi("iphone",$browserAgent) --> preg_match('/iphone/i',$browserAgent) 

、あなただけ$browserAgent内にあるとして、$userAgentに一致するようにしようとしていますか?たとえば、特定の$userAgentfoo.barだった場合は、.をリテラル期間に一致させたいのですか、正規表現の意味(「任意の文字に一致」)で解釈しますか?

かつての場合、私はあなたが正規表現を完全にあきらめることをお勧めしたいと$haystack(大文字と小文字を区別しない)内の文字列$needleを探している、stripos($haystack,$needle)を使用しています。次に、$userAgentのアスタリスクが、文字通りの意味ではなく正規表現の意味で解釈されている(心配する)必要はありません。あなたがstriposを使用する場合

は、それがfalseに評価します0を返すことができます忘れないでください、あなたは=== falseまたは!== false(私はリンクのマニュアルを参照してください)を使用する必要があります。

+0

応答のためにありがとう - また、正規表現の解釈のメモ..最も便利です。 – Innate

関連する問題