I want to create plugin that finds and replaces phone numbers with a linked number for mobile. This is a php function that I have written for Joomla to use to replace a phone number...
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;
}
Right now the function finds the pattern and just replaces it with an empty link. How can insert the phone number found by regex into a link?
The problem is that you are using $1
and $2
backreferences that refer to Group 1 (i.e. substring captured with (\+0?1\s)?
) and non-existent Group 2 (thus, it is an empty string) rather than to the whole match (that can be referred to with the help of $0
or \0
).
Here is a fix:
$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);
See IDEONE demo
See more about Back references in PHP Manual.