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

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

1041
28.03.2017

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

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

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

$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>

Источник: https://blog.dotzero.ru/php-phone-format/


Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

Еще никто не комментировал данную публикацию. Будьте первыми!

Добавить комментарий

captcha

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