Есть значение в БД номера телефона в формате 380501234567 Требуется вывести это значение на экран в формате (050) 123-45-67
Пока только понял как удалить первые два символа, это:
$phone = '380501234567';
$format_phone = substr($phone, 2);
Отвечая на вопрос ТС
Спасибо большое, я так и реализовал. Просто думал есть более изощренный метод)
<?php
// начальное значение, проверки на корректность формата опущены
$phone = '380501234567';
/*
Матчим регуляркой, используя именованные подмаски (именованные подшаблоны)
`?:` - эта подмаска не будет извлечена в результирующий массив $m
`?<code>`
`?<group1>`
`?<group2>`
`?<group3>` - будут извлечены с ключами code, group1, group2, group3
@see http://php.net/manual/ru/regexp.reference.subpatterns.php
*/
preg_match('~^(?:[0-9]{2})(?<code>[0-9]{3})(?<group1>[0-9]{3})(?<group2>[0-9]{2})(?<group3>[0-9]{2})$~', $phone, $m);
/*
Извлекаем значения массива в переменные
Это не обязательно, возможно использовать $m['code'], $m['group1'], $m['group2'], $m['group3']
*/
extract($m);
/*
Преимущество использования `sprintf`:
1. шаблон номера телефона '(%s) %s-%s-%s' удобен для визуального восприятия
2. этот шаблон возможно перенести в конфигурацию модуля, с возможностью редактирования администратором сайта без поиска по коду.
Другими словами, '(%s) %s-%s-%s' использовать как параметр шаблона, который можно переопределить без вмешательства в код
*/
// выводит: (050) 123-45-67
$phoneTemplate = '(%s) %s-%s-%s';
echo sprintf($phoneTemplate, $code, $group1, $group2, $group3);
// выводит: <span class="text-muted">(050)</span> 123-45-67
$phoneTemplate = '<span class="text-muted">(%s)</span> %s-%s-%s';
echo sprintf($phoneTemplate, $code, $group1, $group2, $group3);
$arr = str_split($phone);
echo '('.$arr[2].$arr[3].$arr[4].')'.$arr[5].$arr[6].$arr[7].'-'.$arr[8].$arr[9].'-'.$arr[10].$arr[11];
function phone_number($sPhone){
$sPhone = preg_replace("[^0-9]",'',$sPhone);
$sPhone = substr($sPhone, 2);
if(strlen($sPhone) != 10) return(False);
$sArea = substr($sPhone, 0,3);
$sPrefix = substr($sPhone,3,2);
$sNumber = substr($sPhone,5,2);
$sEnd = substr($sPhone,7,2);
$sPhone = "(".$sArea.")".$sPrefix."-".$sNumber."-".$sEnd;
return($sPhone);
}
$phone = '380501234567';
echo phone_number($phone);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Можете подсказать, почему подобный код (ниже), выводит такую ошибку Warning: Illegal string offset 'key'
Есть файл с новостями (нельзя использовать sql)Каждая третья строка является названием статьи