将特定输入数字格式化为另一种格式

发布于 2024-10-21 10:31:57 字数 133 浏览 4 评论 0原文

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

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

I need to format the following number 0825632332 to this format +27 (0)82 563 2332.

Which combination of functions would work the best, should I use regular expressions or normal string functions to perform the re-formatting? And how?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

谜兔 2024-10-28 10:31:57

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

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

I think using a regexp is the best way, maybe something like this :

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

Be aware that $num must be a string since your number starts with 0.

You can also use character class :

$text = preg_replace('/(\d)(\d{2})(\d{3})(\d{4})/', '+27 ($1) $2 $3 $4', $num);
⊕婉儿 2024-10-28 10:31:57

既然你问了 - 非正则表达式解决方案:

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

Since you asked - non regex solution:

<?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');
?>
动听の歌 2024-10-28 10:31:57

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

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

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

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

Regex will work nicely, replace

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

by

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

You can also perform string submatching if you want.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文