如何删除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式模式适合你所需要的。

这有帮助吗?