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

时间:2016-01-22 03:17:55

标签: php split spaces

如何拆分此字符串:

56A19E6D77828

格式如下:

56A1 9E6D 7782 8

是否有为此构建的本机PHP函数?

3 个答案:

答案 0 :(得分:6)

您可以使用str_split()

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

输出:

56A1 9E6D 7782 8

答案 1 :(得分:0)

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

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

如果在字符串长度为四分之一的情况下需要小心不要添加额外的尾随空格,则只需检查您是否尚未到达字符串锚点的末尾即可。

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

Demo Link

模式很简单:

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

没有字符串爆炸或数组内爆,只需直接操作字符串即可。

答案 2 :(得分:0)

如果有人需要在每次拆分中拆分不同的数字,然后将它们合并在一起,这是超级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