2015-10-28 18 views
1

我想創建一個插件,它可以找到並替換手機號碼與手機號碼。這是我寫爲Joomla用更換電話號碼的PHP函數...PHP正則表達式preg_replace函數Joomla!插件

protected function clickToCall(&$text, &$params){ 
    // phone number pattern... 
    $pattern = '~(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}~'; 
    //replacement pattern... 
    $replacement = '<a href="tel:$1$2">$1$2</a>'; 
    //use preg_replace to actually replace the pattern 
    $text = preg_replace($pattern, $replacement, $text); 
    //return the new value 
    return true; 
} 

眼下函數查找模式,只是一個空鏈接替換它。如何將正則表達式找到的電話號碼插入鏈接?

+0

嘗試用'$0'替換''''。檢查[此演示](http://ideone.com/YUVXNm)。 –

回答

0

的問題是,使用的是$1$2反向引用引用第1組(即,具有(\+0?1\s)? SUBSTRING捕獲)和不存在的第2組(因此,它是一個空字符串),而不是對整個匹配(即可以參考$0\0的幫助)。

這裏是一個修復:

$text = 'Phone +1 (234) 345 6543 to obtain a free copy.'; 
$pattern = '~(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}~'; 
$replacement = '<a href="tel:$0">$0</a>'; 
echo $text = preg_replace($pattern, $replacement, $text); 

IDEONE demo

查看更多有關Back referencesPHP Manual

+1

這真棒!我猜想對於什麼()以及如何使用$ 1 $ 2等有些不太瞭解,因爲我對正則表達式不是很熟悉,感謝您花時間回答這個問題,這是一個巨大的幫助。 – Eric