Вывести значение в необходимом формате php

206
18 июля 2018, 14:20

Есть значение в БД номера телефона в формате 380501234567 Требуется вывести это значение на экран в формате (050) 123-45-67

Пока только понял как удалить первые два символа, это:

 $phone = '380501234567';
 $format_phone = substr($phone, 2);
Answer 1

Отвечая на вопрос ТС

Спасибо большое, я так и реализовал. Просто думал есть более изощренный метод)

<?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);
Answer 2
$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];
Answer 3
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); 
READ ALSO
file_get_content и json_encode php

file_get_content и json_encode php

Можете подсказать, почему подобный код (ниже), выводит такую ошибку Warning: Illegal string offset 'key'

200
Редактирование файла с новостями в php

Редактирование файла с новостями в php

Есть файл с новостями (нельзя использовать sql)Каждая третья строка является названием статьи

179
В чем проблема на php не выдаёт результат

В чем проблема на php не выдаёт результат

В чем ошибка? Не выдаёт результат

196
Преобразование url и Redirect (.htaccess)

Преобразование url и Redirect (.htaccess)

Происходит редирект

213