javascript / jqueryで先行ゼロを削除/切り捨てます


85

javascript、jqueryによって数値(任意の文字列)から先行ゼロを削除または切り捨てるための解決策を提案します。


4
文字列が「000000000」の場合にどうなるか
robert 2011年

数値は常に整数であると予想されますか、それとも小数の数値を処理する必要があります'00000.5'か(例)?
クリスチャンC.サルバド2011年

与えられた文字列に対して機能するはずです。つまり、「00000evsdd」は「evsdd」を、「00000.5」は「.5」を与える必要があります
Somnath

回答:


197

文字列の先頭でゼロに一致する正規表現を使用できます。

s = s.replace(/^0+/, '');

13
@SomnathMuluk:それは多くのjavascriptプログラマーにとって驚きです!
バート

@Guffa:jqueryコードで使用しています。機能していない可能性があります。
Somnath Muluk 2011年

2
@ Somnath、jQueryはjavascriptです。javascriptで何かが機能する場合、jQueryを使用していても、引き続き機能します。
阿部ミースラー2011年

5
なぜ反対票を投じるのですか?あなたが間違っていると思うことを説明しなければ、それは答えを改善することはできません。
guffa 2012年

2
s = s.replace(/ ^ 0 + /、 '')は、「00」を「」(ゼロが1つある文字列ではなく空の文字列)に変換します。これはほとんどの場合望ましくないため、関数にカプセル化して、次の行を追加します:if(s == "")s = "0";
オリバーコニグ2015年

31

Number()関数を使用します:

var str = "00001";
str = Number(str).toString();
>> "1"

または、文字列に1を掛けます

var str = "00000000002346301625363";
str = (str * 1).toString();
>> "2346301625363"

2
2 ^ 53より大きい値では機能しません。Number( "009007199254740993")。toString()は "9007199254740992"になります
madreason 2017

13

少し遅れるかもしれませんが、2セント追加したいと思います。

文字列が常に先行ゼロの可能性がある数値を表す場合は、「+」演算子を使用して文字列を数値にキャストできます。

例えば

x= "00005";
alert(typeof x); //"string"
alert(x);// "00005"

x = +x ; //or x= +"00005"; //do NOT confuse with x+=x, which will only concatenate the value
alert(typeof x); //number , voila!
alert(x); // 5 (as number)

文字列が数字を表しておらず、0を削除するだけでよい場合は、他のソリューションを使用しますが、数字としてのみ必要な場合は、これが最短の方法です。

そして参考までに、次のように、空の文字列を連結すると、逆に、数値を文字列として機能させることができます。

x = 5;
alert(typeof x); //number
x = x+"";
alert(typeof x); //string

それが誰かを助けることを願っています


2 ^ 53より大きい値では機能しません。(+ "009007199254740993")。toString()は "9007199254740992"になります
madreason 2017

13

「どんな文字列でも」とおっしゃっていたので、これも扱いたい文字列だと思います。

"00012  34 0000432    0035"

だから、正規表現は行く方法です:

var trimmed = s.replace(/\b0+/g, "");

そして、これは「000000」値の損失を防ぎます。

var trimmed = s.replace(/\b(0(?!\b))+/g, "")

あなたは見ることができます ここで実際の例ます


3

javascriptの先行ゼロ(数値または任意の文字列)を切り捨てるためのこのソリューションを取得しました:

<script language="JavaScript" type="text/javascript">
<!--
function trimNumber(s) {
  while (s.substr(0,1) == '0' && s.length>1) { s = s.substr(1,9999); }
  return s;
}

var s1 = '00123';
var s2 = '000assa';
var s3 = 'assa34300';
var s4 = 'ssa';
var s5 = '121212000';

alert(s1 + '=' + trimNumber(s1));
alert(s2 + '=' + trimNumber(s2));
alert(s3 + '=' + trimNumber(s3));
alert(s4 + '=' + trimNumber(s4));
alert(s5 + '=' + trimNumber(s5));
// end hiding contents -->
</script>

4
それはあまり良いコードではありません。文字列の長さのチェックは完全に不要であり、に評価されることはありませんfalse。の99992番目のパラメータとしてを使用するsubstr必要はありません。を使用するだけwhile (s.substr(0,1) == '0') s = s.substr(1);です。さらに、そのコードスニペットは非常に古く見えlanguagescriptタグの属性は長い間非推奨になっていscriptます。タグ内でコメントを使用する必要があるのはscript、Internet Explorer1.0などのタグをまったく理解しないブラウザの場合のみです。
グッファ2012年



2

次のように1を掛けてみてください。

"00123" * 1; //番号
"00123" * 1 + ""として取得 ; //文字列として取得


1

「parseInt」関数の「radix」パラメーターを使用する必要があります:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt?redirectlocale = en-US redirectslug = JavaScript%2FReference %2FGlobal_Objects%2FparseInt

parseInt( '015'、10)=> 15

使用しない場合、一部のJavaScriptエンジンは8進数のparseInt( '015')=> 0として使用する可能性があります。


1

番号がint使用の場合

"" + parseInt(str)

番号がフロートの場合は使用

"" + parseFloat(str)

0

正規表現なしのもう1つの方法:

function trimLeadingZerosSubstr(str) {
    var xLastChr = str.length - 1, xChrIdx = 0;
    while (str[xChrIdx] === "0" && xChrIdx < xLastChr) {
        xChrIdx++;
    }
    return xChrIdx > 0 ? str.substr(xChrIdx) : str;
}

短い文字列を使用すると、正規表現(jsperf)よりも高速になります


0
const input = '0093';
const match = input.match(/^(0+)(\d+)$/);
const result = match && match[2] || input;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.