2011-02-23 77 views
111

如果我有一個字符串如何刪除所有前導零字符串中的

00020300504 
00000234892839 
000239074 

我怎麼能擺脫前導零的,這樣我纔會有這個

20300504 
234892839 
239074 

注意,上面的數字是隨機產生的。

+0

這三個單獨的字符串,還是一個用新行分隔每個數字的字符串?我在編輯你的問題時注意到你有'
'標籤分隔數字;他們真的是你的字符串的一部分嗎? – erisco 2011-02-23 23:42:09

回答

340

ltrim

$str = ltrim($str, '0'); 
+2

+1不知道第二個參數,謝謝! – Czechnology 2011-02-23 23:55:23

+2

^_ ^,感謝lonesomeday,這解決了我最多5個小時想到的問題... – Gerald 2011-02-24 00:20:30

+1

你讓我的一天! – Xavier 2014-10-07 11:45:48

9
(string)((int)"00000234892839") 
+0

我剛剛嘗試過一個'(int)「00009384783473」'(隨機數),我的結果是2147483647.但是,如果我把它作爲一個浮點,它似乎工作正常。奇怪的 – JamesHalsall 2011-02-23 23:37:37

+0

手冊說「整數的大小是依賴於平臺的,儘管最大值約爲20億是通常的值(這是32位有符號)」 – llamerr 2011-02-23 23:39:54

+1

並不奇怪。在PHP中的整數上升到2^31,這是2147483647.對於任何更大的數字,你將不得不使用lonesomeday的基於字符串的解決方案。 – awm 2011-02-23 23:41:40

-2

假設你想要三個或者更多零的上運行被刪除,你的例子是一個字符串:

$test_str ="0002030050400000234892839000239074"; 
    $fixed_str = preg_replace('/000+/','',$test_str); 

可以使正則表達式模式如果我的假設是關閉的,就符合你的需要。

This help?

+0

不正確,對不起。這也會從字符串中間減少'000'。 – 2016-11-28 16:10:40

2

我不認爲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 
+0

如果在正則表達式的開頭添加^運算符,它是一個有效的解決方案。 – twicejr 2018-02-13 12:08:41

2

正則表達式,提出了,但不正確:

<?php 
    $number = '00000004523423400023402340240'; 
    $withoutLeadingZeroes = preg_replace('/^0+/', $number) 
    echo $withoutLeadingZeroes; 
?> 

輸出是:對正則表達式

4523423400023402340240 

背景: 開始字符串的^信號和+標誌信號更多或者沒有前面的標誌。因此,正則表達式^0+匹配字符串開頭的所有零。

7

另一項建議類似,但不會抹殺實際零:

if (ltrim($str, '0') != '') { 
    $str = ltrim($str, '0'); 
} else { 
    $str = '0'; 
} 
7

不知道爲什麼人都在用這麼複雜的方法來實現這樣一個簡單的事情!和正則表達式?哇!

在這裏,你走了,最簡單,最簡單的方法(如這裏解釋:https://nabtron.com/kiss-code/):

$a = '000000000000001'; 
$a += 0; 

echo $a; // will output 1 
+1

這似乎是一個更簡單的解決方案,但它不像其他答案那樣處理任何大小的字符串。你從一個字符串轉換爲一個整數,然後作爲一個字符串返回 - 更簡單的僅僅是縮短字符串。 – 2016-10-12 18:41:32

+1

有趣,但我不知道它是否是類型轉換的最佳解決方案。 – jonathanbell 2017-03-02 18:52:20

3

,你可以在你的變量添加 「+」,

例如:

$numString = "0000001123000"; 
echo +$numString; 
+0

這很簡單,容易 – 2016-11-21 19:37:31

-1

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 

其實任何數學函數會從「字符串」的數量和對待它就像這樣。它比任何正則表達式或比較函數都要簡單得多。 我看到在php.net中,不記得在哪裏。