Форматирование определенного входного номера в другой формат - PullRequest
1 голос
/ 10 марта 2011

Мне нужно отформатировать следующий номер 0825632332 в этот формат +27 (0)82 563 2332.

Какая комбинация функций будет работать лучше, если я буду использовать регулярные выражения или обычные строковые функции для выполнения переформатирования? И как?

Ответы [ 3 ]

2 голосов
/ 10 марта 2011

Я думаю, что использование регулярного выражения - лучший способ, может быть, что-то вроде этого:

$text = preg_replace('/([0-9])([0-9]{2})([0-9]{3})([0-9]{4})/', '+27 ($1) $2 $3 $4', $num);

Помните, что $ num должно быть строкой, поскольку ваш номер начинается с 0.

Вы также можете использовать класс символов:

$text = preg_replace('/(\d)(\d{2})(\d{3})(\d{4})/', '+27 ($1) $2 $3 $4', $num);
2 голосов
/ 10 марта 2011

Так как вы спросили - решение без регулярных выражений:

<?php
function phnum($s, $format = '+27 (.).. ... ....') {
        $si = 0;
        for ($i = 0; $i < strlen($format); $i++)
                if ($format[$i] == '.')
                        $output[] = $s[$si++];
                else
                        $output[] = $format[$i];
        return join('',$output);
}

echo phnum('0825632332');
?>
1 голос
/ 10 марта 2011

Regex будет работать хорошо, замените

(\d)(\d{2})(\d{3})(\d{4})

на

+27 (\1)\2 \3 \4

Вы также можете выполнить подстроку строки, если хотите.

...