将特定输入编号格式化为另一种格式

时间:2011-03-10 18:31:44

标签: php regex phone-number

我需要将以下数字0825632332格式化为此格式+27 (0)82 563 2332

哪种功能组合效果最好,我应该使用正则表达式还是普通字符串函数来执行重新格式化?怎么样?

3 个答案:

答案 0 :(得分:2)

我认为使用正则表达式是最好的方法,也许是这样的:

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

答案 1 :(得分:2)

因为你问过 - 非正则表达式解决方案:

<?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');
?>

答案 2 :(得分:1)

正则表达式可以很好地工作,替换

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

通过

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

如果需要,您还可以执行字符串子匹配。