我需要将以下数字0825632332
格式化为此格式+27 (0)82 563 2332
。
哪种功能组合效果最好,我应该使用正则表达式还是普通字符串函数来执行重新格式化?怎么样?
答案 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
如果需要,您还可以执行字符串子匹配。