PHP正则表达式preg_replace函数Joomla!插入

时间:2015-10-28 20:30:32

标签: php regex joomla

我想创建一个插件,用于查找和替换带有移动链接号码的电话号码。这是我为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;
}

现在该函数找到模式并用空链接替换它。如何将正则表达式找到的电话号码插入链接?

1 个答案:

答案 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