如何删除string中的所有前导零
如果我有一个string
00020300504 00000234892839 000239074
我怎么能摆脱前面的零,这样我才会有这个
20300504 234892839 239074
注意上面的数字是随机生成的。
ltrim
:
$str = ltrim($str, '0');
(string)((int)"00000234892839")
类似于另一个build议,除了不会消除实际的零:
if (ltrim($str, '0') != '') { $str = ltrim($str, '0'); } else { $str = '0'; }
不知道为什么人们用这么复杂的方法来实现这么简单的事情! 和正则expression式? 哇!
在这里,你去,最简单和最简单的方法(如这里解释: https : //nabtron.com/kiss-code/ ):
$a = '000000000000001'; $a += 0; echo $a; // will output 1
你可以在你的variables中加“+”
例如:
$numString = "0000001123000"; echo +$numString;
我不认为preg_replace是答案..旧线程,但恰巧今天正在寻找这个。 ltrim和(int)铸造是胜利者。
<?php $numString = "0000001123000"; $actualInt = "1123000"; $fixed_str1 = preg_replace('/000+/','',$numString); $fixed_str2 = ltrim($numString, '0'); $fixed_str3 = (int)$numString; echo $numString . " Original"; echo "<br>"; echo $fixed_str1 . " Fix1"; echo "<br>"; echo $fixed_str2 . " Fix2"; echo "<br>"; echo $fixed_str3 . " Fix3"; echo "<br>"; echo $actualInt . " Actual integer in string"; //output 0000001123000 Origina 1123 Fix1 1123000 Fix2 1123000 Fix3 1123000 Actual integer in tring
正则expression式已经提出,但不正确:
<?php $number = '00000004523423400023402340240'; $withoutLeadingZeroes = preg_replace('/^0+/', $number) echo $withoutLeadingZeroes; ?>
输出是:
4523423400023402340240
正则expression式的背景:string开始的^
信号和+
符号表示前面的符号中的更多或者不是前面的符号。 因此,正则expression式^0+
匹配一个string开头的所有零。
Ajay Kumar提供最简单的echo + $ numString; 我使用这些:
echo round($val = "0005"); echo $val = 0005; //both output 5 echo round($val = 00000648370000075845); echo round($val = "00000648370000075845"); //output 648370000075845, no need to care about the other zeroes in the number //like with regex or comparative functions. Works w/wo single/double quotes
实际上任何math函数都会从“string”中取出数字并像这样对待它。 它比任何正则expression式或比较函数都要简单得多。 我在php.net看到,不记得在哪里。
假设你想要一个三个或更多的零的运行被删除,你的例子是一个string:
$test_str ="0002030050400000234892839000239074"; $fixed_str = preg_replace('/000+/','',$test_str);
如果我的假设是closures的,你可以使正则expression式模式适合你所需要的。
这有帮助吗?