我想创建一个插件,用于查找和替换带有移动链接号码的电话号码。这是我为Joomla用来替换电话号码的PHP函数...
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)
问题是您正在使用引用第1组的$1
和$2
反向引用(即使用(\+0?1\s)?
捕获的子字符串)和不存在的第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 references中详细了解PHP Manual。