我试图根据位数输出一定数量的零。我的代码没有输出我想要的。
$x = '12345';
$y = preg_replace('/(\d+)/', str_pad('',(12-strlen("$1")),0), $x);
echo "y = $y";
# expected output: y = 0000000 (7 zeros)
# output: y = 0000000000 (10 zeros)
我试图根据位数输出一定数量的零。我的代码没有输出我想要的。
$x = '12345';
$y = preg_replace('/(\d+)/', str_pad('',(12-strlen("$1")),0), $x);
echo "y = $y";
# expected output: y = 0000000 (7 zeros)
# output: y = 0000000000 (10 zeros)
就像你应该使用的评论中所说的dev-null-dwellerpreg_replace_callback()
:
// This requires PHP 5.3+
$x = '12345';
$y = preg_replace_callback('/\d+/', function($m){
return(str_pad('', 12 - strlen($m[0]), 0));
}, $x);
echo "y = $y";
我这样做了:
<?php
$x = '12345';
$y = str_pad(preg_replace('/(\d+)/', "0", $x), 12 - strlen($x), "0", STR_PAD_LEFT);
echo "y = $y";
还有这个正则表达式版本:
$y = str_pad(preg_replace('/\d/', "0", $x), 12 - strlen($x), "0", STR_PAD_LEFT);
还有这个,如果你不希望最终输出看起来像:0012345
$y = str_pad($x, 7, "0", STR_PAD_LEFT);