[英]How to correctly replace ereg with 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功能的正確方法是什么?
如果可以信任所有模式字符串( $userAgent
和iphone
)不包含特殊的正則表達式字符( ()[]!|.^${}?*+
),則只需將eregi
regex包含斜杠( /
)和在最后一個斜杠后面添加一個i
(表示“不區分大小寫”)。
所以:
eregi($userAgent,$browserAgent) --> preg_match("/$userAgent/i",$browserAgent)
eregi("iphone",$browserAgent) --> preg_match('/iphone/i',$browserAgent)
但是,您只是嘗試在$browserAgent
匹配$userAgent
嗎? 例如,如果特定的$userAgent
是foo.bar
,那么您是否想要.
匹配字面量,還是要以正則表達式解釋(“匹配任何字符”)?
如果是前者,我建議您完全放棄正則表達式,並使用stripos($haystack,$needle)
,它在$haystack
搜索字符串$needle
(不區分大小寫)。 然后,您不必擔心$userAgent
的星號以正則表達式而不是字面意義進行解釋。
如果您確實使用stripos
請不要忘記它可以返回0
,其結果為false
,因此您需要使用=== false
或!== false
(請參閱我鏈接的文檔)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.