如何在每个四个字符序列(如信用卡号)之间添加 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'
图案很简单:
- 匹配任意四个字符 (
.{4}
)
- 忘记匹配字符但保留位置(
\K
)
- 检查是否未遇到字符串结尾 (
(?!$)
- 将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
如何分割这个字符串:
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'
图案很简单:
- 匹配任意四个字符 (
.{4}
) - 忘记匹配字符但保留位置(
\K
) - 检查是否未遇到字符串结尾 (
(?!$)
- 将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