我試圖輸出一定數量的零取決於位數。我的代碼不輸出我想要的。PHP str_pad和strlen內preg_replace
$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)
我試圖輸出一定數量的零取決於位數。我的代碼不輸出我想要的。PHP str_pad和strlen內preg_replace
$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-dweller在評論中說,你應該使用preg_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";
感謝你們倆。這很好地工作。我不知道如何使用preg_replace_callback函數。以$ x作爲示例使用 – user2001487 2013-04-29 18:42:45
我這樣做哪些工作:
<?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);
還有這個,如果你wan't最終輸出的樣子:0
$y = str_pad($x, 7, "0", STR_PAD_LEFT);
。 strlen中的值需要是搜索字符串結果。 – user2001487 2013-04-29 18:39:10
您需要http://php.net/manual/en/function.preg-replace-callback.php爲這 – 2013-04-29 18:26:27