@Octoberfest

Как привести номер телефона к единому виду с добавочными номерами?

Здравствуйте. Есть такая необходимость приводить телефонные номера к единому виду, но вот проблема, некоторые из них указываются абсолютно в произвольном виде с добавочными номерами.
Сейчас у меня реализовано приведение только номеров (без добавочных) - /[^0-9]/ . Но что делать если человек например ввёл добавочный, я попытался сделать так:
1) выбираю все цифры в строке
2) выбираю все буквы в строке
3) разделяю значение телефона по найденной строке
Итого "7(111)111-11-11 доб. 16" -> 71111111111 доб. 16 (потом склеиваю как мне надо).
Теперь вопрос, а если человек ошибся и введет 7111й111111, то всё, пиши пропало же, есть какой-то способ это обойти? Просто алгоритм поиска всех букв и потом делением на подстроки по этим буквам(всем) не совсем надежен кажется...
  • Вопрос задан
  • 2840 просмотров
Пригласить эксперта
Ответы на вопрос 1
Основной номер и добавочный я бы раздел на 2 разных поля - это самый лучший вариант. И естественно хранил бы их отдельно в базе.

Сначала отформатировал бы номер телефона, а после уже добавил свой добавочный если он есть

Оставить в номере телефона только цифры, и отформатировать в красивый вид (функция сама простая, для примера)
echo format_phone('7wer9e85w11-1"!1н1*11'); // вернет: +7 (985) 111-11-11

function format_phone($phone = '')
    {
        $phone = preg_replace('/[^0-9]/', '', $phone); // вернет 79851111111

        if (strlen($phone) != 11 and ($phone[0] != '7' or $phone[0] != '8')) {
            return FALSE;
        }
        
        $phone_number['dialcode'] = substr($phone, 0, 1);
        $phone_number['code']  = substr($phone, 1, 3);
        $phone_number['phone'] = substr($phone, -7);
        $phone_number['phone_arr'][] = substr($phone_number['phone'], 0, 3);
        $phone_number['phone_arr'][] = substr($phone_number['phone'], 3, 2);
        $phone_number['phone_arr'][] = substr($phone_number['phone'], 5, 2);        

        $format_phone = '+' . $phone_number['dialcode'] . ' ('. $phone_number['code'] .') ' . implode('-', $phone_number['phone_arr']);

        return $format_phone;
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы