2011-02-23 9 views
111

私は、文字列私は、このはどのように文字列内のすべての先行ゼロを削除するには

20300504 
234892839 
239074 

ノートを持っていますように、私が先頭にゼロを取り除くことができますどのように

00020300504 
00000234892839 
000239074 

を持っている場合上の数字はランダムに生成されました。

+0

これら3つの別々の文字列か、改行を含む1つの文字列がそれぞれの数字に区切られていますか?あなたの質問を編集するときに、数字を分ける '
'タグがあることに気付きました。彼らは実際にあなたの文字列の一部ですか? – erisco

答えて

340

ltrim:あなたが削除される三個の以上のゼロの上、実行し、あなたの例をしたいと仮定すると、

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

+1は2番目のパラメータについて知りませんでした。ありがとう! – Czechnology

+2

^_ ^、ありがとうlonesomeday、これは私が最も5時間を考えていた私の問題を解決します... – Gerald

+1

あなたは私の一日を作った! – Xavier

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

私はちょうど '(int)" 00009384783473 "'(乱数)を試しました。私の結果は2147483647でした。しかし、私はそれを浮動小数点型にキャストしてもOKです。 Strange – JamesHalsall

+0

マニュアルには、「整数のサイズはプラットフォームに依存しますが、最大値約20億が通常の値です(32ビットが署名されています)」 – llamerr

+1

奇妙ではありません。 PHPの整数は2^31(2147483647)になります。より大きい数値の場合は、lonesomedayの文字列ベースのソリューションを使用する必要があります。 – awm

-2

が1つの文字列です:

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

あなたは正規表現を作ることができます私の前提が外れていれば、あなたが必要とするものを模倣してください。

このヘルプはありますか?

+0

申し訳ありません。これは、文字列の中央から '000'も切り捨てます。 –

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

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

これは簡単な解決策のようですが、他の回答のように文字列のサイズを処理しません。文字列から整数に変換してから、文字列として返すことができます。単に文字列を短くするだけで簡単です。 –

+1

興味深いですが、それが型変換を伴う最良の解決方法であるかどうかはわかりません。 – jonathanbell

3

はあなたの変数に "+" を追加することができ、

例:

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

これは簡単で簡単です –

-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で、どこを覚えていないことがわかりました。

関連する問題