2011-07-23 58 views
-1

我有這個功能,我得到這個錯誤Deprecated: Function eregi() is deprecated in...。如果我改變eregipreg_match我得到這個錯誤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

請指出爲什麼3939個[不推薦使用+ function + eregi](http://stackoverflow.com/search?q=Deprecated%3A+Function+eregi%28%29)的搜索結果中沒有一個可以幫助您解決問題 – Gordon

+0

[將ereg表達式轉換爲preg]的副本(http://stackoverflow.com/questions/6270004/converting-ereg-expressions-to-preg) – mario

回答

1

嘗試

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

額日格和預浸有不同的語法。在這種情況下,它們非常相似,您可以簡單地在它們周圍添加分隔符,並且我認爲它會起作用。

1

ereg()是PHP做正則表達式的老樣子,和PCRE(preg_matchpreg_*)速度更快,功能更強大 - 這解釋了爲什麼第一個現在已經過時。

從ereg遷移到PCRE應該不會太難,但是這兩個引擎接受的語法之間有一些差異 - 這意味着您可能需要修正幾個正則表達式。


這裏,解釋了你得到的消息是,PCRE需要一個分隔符約於正則表達式的差異。

例如,您正則表達式不應該Galeon,但/Galeon/
你可以使用幾乎你喜歡的分隔符的任何字符。


欲瞭解更多信息:

報價是最後一個環節的第一點:

PCRE功能要求該模式由 delimiters包圍。