175

重複の可能性:
Javascript で文字列の先頭のゼロを切り捨てる

Javascript で数値から先頭のゼロを削除する最も簡単でクロスブラウザー互換の方法は何ですか?

たとえば、テキスト ボックスの値が 014 または 065 の場合、14 または 65 のみが返されます。

4

3 に答える 3

284

この変換には 4 つの方法を使用できます

  1. 基数付きのparseInt 10
  2. 数値コンストラクター
  3. 単項プラス演算子
  4. 数学関数の使用 (減算)

const numString = "065";

//parseInt with radix=10
let number = parseInt(numString, 10);
console.log(number);

// Number constructor
number = Number(numString);
console.log(number);

// unary plus operator
number = +numString;
console.log(number);

// conversion using mathematical function (subtraction)
number = numString - 0;
console.log(number);


更新 (コメントに基づく): なぜこれが「多数」で機能しないのですか?

プリミティブ型Numberの場合、最も安全な最大値は2 53-1 ( Number.MAX_SAFE_INTEGER) です。

console.log(Number.MAX_SAFE_INTEGER);

ここで、数字の文字列「099999999999999999999」を考えて、上記の方法を使用して変換してみましょう

const numString = '099999999999999999999';

let parsedNumber = parseInt(numString, 10);
console.log(`parseInt(radix=10) result: ${parsedNumber}`);

parsedNumber = Number(numString);
console.log(`Number conversion result: ${parsedNumber}`);

parsedNumber = +numString;
console.log(`Appending Unary plus operator result: ${parsedNumber}`);

parsedNumber = numString - 0;
console.log(`Subtracting zero conversion result: ${parsedNumber}`);

すべての結果は不正確になります。

これは、変換すると numString 値が より大きいためNumber.MAX_SAFE_INTEGERです。つまり、

99999999999999999999 > 9007199254740991

stringこれは、を型に変換できるという前提で実行されたすべての操作numberが失敗することを意味します。

2 53より大きい数については、プリミティブBigIntが最近追加されました。ブラウザの対応状況はBigIntこちらでご確認ください。

変換コードはこのようになります。

const numString = '099999999999999999999';
const number = BigInt(numString);

PS: なぜ基数が重要なのparseIntですか?

基数が未定義または 0 (または存在しない) の場合、JavaScript は次のことを想定します。

  • 入力文字列が「0x」または「0X」で始まる場合、基数は 16 (16 進数) で、文字列の残りが解析されます。
  • 入力文字列が「0」で始まる場合、基数は 8 (8 進数) または 10 (10 進数) です。
  • 入力文字列が他の値で始まる場合、基数は 10 (10 進数) です。

どの基数が選択されるかは、実装に依存します。ECMAScript 5 では 10 (10 進数) を使用するように指定されていますが、まだすべてのブラウザーがこれをサポートしているわけではありません。

このため、parseInt を使用する場合は必ず基数を指定してください。

于 2011-07-13T09:08:53.127 に答える
236

正規表現:

"014".replace(/^0+/, '')
于 2011-07-13T09:00:13.780 に答える
24

なぜこれをしたいのかは明らかではありません。正しい数値を取得したい場合は、単項+ [docs]を使用できます。

value = +value;

テキストをフォーマットしたいだけなら、正規表現の方が良いかもしれません。それはあなたが扱っている価値観に依存します。整数しかない場合は、

input.value = +input.value;

も大丈夫です。もちろん、浮動小数点値でも機能しますが、ポイントの後にある桁数によっては、それを数値に変換してから文字列に戻すと、(少なくとも表示のために) 一部が削除される可能性があります。

于 2011-07-13T09:02:22.393 に答える