Приведение номера телефона к формату звонка

Ушло очень много времени на то, чтобы настроить автоматическое приведение номера телефона в формат, доступный к звонку, делюсь полученным решением.

Данный метод заключается в том, чтобы отображать нужный формат номера телефона в зависимости от заданной маски.

Зададим массив с масками (пока только маска для украинских номеров телефона. Позже проверю ее и для российских форматов):

$formats = array(
	'12'=>'+############', // for +38 0XX XX XXX XX or 38 0XX XX XXX XX
	'10'=>'+38#########' // for 0XX XX XXX XX
);

Ключ массива - это количество символов в строке, которая попадает на обработку по маске.

Дальше опишем функцию:

PhoneFormat($phone, $format, $mask = '#',$codeSplitter = '0')
{
	$phone = preg_replace('/[^0-9]/', '', $phone);

	$phone = substr($phone,strpos($phone,$codeSplitter));

	if (is_array($format))
	{
		if (array_key_exists(strlen($phone), $format))
		{
			$format = $format[strlen($phone)];
		} else
		{
			return $phone;
		}
	}

	$pattern = '/' . str_repeat('([0-9])?', substr_count($format, $mask)) . '(.*)/';

	$format = preg_replace_callback(
		str_replace('#', $mask, '/([#])/'),
		function () use (&$counter)
		{
			return '${' . (++$counter) . '}';
		},
		$format
	);

	return ($phone) ? trim(preg_replace($pattern, $format, $phone, 1)) : false;
}

Данная функция сначала очищает полученную строку с номером телефона от всех лишних символов (пробелы, дефисы, скобочки). Дальше мы отделяем код страны от кода оператора и самого номера (для Украины корректный формат будет +380XXXXXXXXX), но иногда пользователи забывают вбить один из символов: "+","3","8" - в любом сочетании, поэтому код страны отсекаем, а его добавляем дальше уже маской.

Дальше функция строит номер телефона в зависимости от прописанной маски.

Использование:

echo PhoneFormat('0987654321',$formats, '#');
echo PhoneFormat('+30987654321',$formats, '#');
echo PhoneFormat('+380987654321',$formats, '#');
echo PhoneFormat('30987654321',$formats, '#');
echo PhoneFormat('80987654321',$formats, '#');
echo PhoneFormat('+80987654321',$formats, '#');
// Все варианты вернут значение +38098765432

Теперь эту функцию можно использовать для вывода ссылки на совершение звонка:

<?$phone = '+3(098)765-43-21';?>
<a href="tel:<?=PhoneFormat($phone)?>">$phone</a>
Количество показов: 6500
28.03.2017

Возврат к списку

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

Разработка сайта

Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...

Сопровождение сайта

Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение

Работы по сайту

Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.