2011-07-23 11 views
-1

私はこの機能を持っており、このエラーはDeprecated: Function eregi() is deprecated in...です。私はpreg_matcheregiを変更する場合、私はWarning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in...php廃止されました:関数eregi()は非推奨です、どのように?

function getBrowser($userAgent) { 
$browsers = array(
    'Opera' => 'Opera', 
    'Mozilla Firefox'=> '(Firebird)|(Firefox)', // Use regular expressions as value to identify browser 
    'Galeon' => 'Galeon', 
    'Chrome'=>'Gecko', 
    'MyIE'=>'MyIE', 
    'Lynx' => 'Lynx', 
    'Netscape' => '(Mozilla/4\.75)|(Netscape6)|(Mozilla/4\.08)|(Mozilla/4\.5)|(Mozilla/4\.6)|(Mozilla/4\.79)', 
    'Konqueror'=>'Konqueror', 
    'SearchBot' => '(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp/cat)|(msnbot)|(ia_archiver)', 
    'Internet Explorer 8' => '(MSIE 8\.[0-9]+)', 
    'Internet Explorer 7' => '(MSIE 7\.[0-9]+)', 
    'Internet Explorer 6' => '(MSIE 6\.[0-9]+)', 
    'Internet Explorer 5' => '(MSIE 5\.[0-9]+)', 
    'Internet Explorer 4' => '(MSIE 4\.[0-9]+)', 
); 
foreach($browsers as $browser=>$pattern) { 
    if(eregi($pattern, $userAgent)) { 
     return $browser; 
    } 
} 
return 'Unknown'; 
} 

この問題を解決する方法上の任意のアイデアを、このエラーが発生します。そしてまた、私はあなたたちは心をいけない場合ので、私はあなたが区切り文字を使用することになっている

おかげ

+0

を試してみてください。 –

+2

[deprecated + function + eregi](http://stackoverflow.com/search?q=Deprecated%3A+Function+eregi%28%29)の3939検索結果が、あなたの問題を解決するのに役立った理由を指摘してください – Gordon

+0

[ereg式をpregに変換する]の複製(http://stackoverflow.com/questions/6270004/converting-ereg-expressions-to-preg) – mario

答えて

1

それは警告ではないエラーです

if(preg_match("#".$pattern."#", $userAgent)) { 
3

を理解することができます何が起こっているかのダウン易しく書き直さ説明したいと思います。この場合、http://www.php.net/manual/en/reference.pcre.pattern.posix.php

をお読みください、次のように動作するはずです:

if(preg_match('`'.$pattern.'`i', $userAgent)) 
0

EREGおよびプリプレグは異なる構文を持っています。この場合、それらは似ていて、単に区切り文字を区切り文字として追加するだけで、うまくいくと思います。

1

ereg()は、PHPで正規表現を実行する従来の方法であり、PCRE(preg_matchおよびその他preg_*)は高速で強力です。なぜ、最初のものが廃止されたのかが説明されています。

eregからPCREへの移行はあまり厳しくすべきではありませんが、2つのエンジンで受け入れられる構文には2つの違いがあります。つまり、正規表現のいくつかを修正する必要があります。ここで


、あなたが得るメッセージを説明して違いはPCRE正規表現 arroundの区切り文字を期待していることです。

たとえば、あなたの正規表現はGaleonが、/Galeon/
すべきではないそして、あなたは区切り文字として、かなりお好きな文字を使用することができます。

その最後のリンクの最初のポイントを引用:

の詳細情報については


PCRE関数では、パターンが delimitersで囲まれている必要があります。

関連する問題