После прочтения этих ответов кажется, что не было простого регулярного выражения, которое может анализировать через кучу текста и вытаскивать телефонные номера в любом формате (включая международный с значком плюс и без него).
Вот что я недавно использовал для клиентского проекта, где нам нужно было преобразовать все телефонные номера в любом формате в tel: links.
До сих пор он работал со всем, что они бросили на это, но если возникнут ошибки, я обновлю этот ответ.
Regex:
/(\+*\d{1,})*([ |\(])*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4})/
PHP-функция для замены всех телефонных номеров на tel : ссылки (в случае, если кому-то интересно):
function phoneToTel($number) {
$return = preg_replace('/(\+*\d{1,})*([ |\(])*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4})/', '<a href="tel:$1$3$4$5">$1 ($3) $4-$5</a>', $number); // includes international
return $return;
}