如何在每个四个字符序列(如信用卡号)之间添加 space?

How to add a space between every sequence of four characters (like a credit card number)?

如何分割这个字符串:

56A19E6D77828

转换成这样的格式:

56A1 9E6D 7782 8

是否有为此构建的任何原生 PHP 函数?

您可以使用str_split()

$card = "56A19E6D77828";
echo join(" ", str_split($card, 4));

输出:

56A1 9E6D 7782 8

对于您的示例输入,此任务可以通过一次函数调用完成,并且无需生成临时数组

$string = '56A19E6D77828';
var_export(preg_replace('~.{4}\K~', ' ', $string));  // '56A1 9E6D 7782 8'

如果您需要注意不要在字符串长度为四倍时添加额外的尾随 space,那么只需检查您是否没有到达字符串锚点的末尾。

$string = '56A19E6D77828333';
var_export(preg_replace('~.{4}\K(?!$)~', ' ', $string));  // '56A1 9E6D 7782 8333'

Demo Link

图案很简单:

  1. 匹配任意四个字符 (.{4})
  2. 忘记匹配字符但保留位置(\K)
  3. 检查是否未遇到字符串结尾 ((?!$)
  4. 将space添加到字符串中的位置

没有字符串爆炸或数组内爆,只是直接的字符串操作。

如果有人需要为每个拆分拆分不同的数字,然后将它们连接在一起,这非常 hacky 但这有效,必须拆分一张呈现的礼品卡。

$card = "603628385592165882327";

$test = str_split($card, 6);
$test1 = str_split($card, 5);
$test2 = str_split($card, 6);
$test3 = str_split($card, 4);

$number = $test[0];
$number .= " ";
$number .=  $test1[1];
$number .= " ";
$number .=  $test2[2];
$number .= " ";
$number .=  $test3[3];

echo $number;

结果

603628 83855 165882 1658