删除 Javascript 中数字的前导零

可能的复制品:
截断 Javascript 中字符串的前导零

在 Javascript 中删除数字前导零的最简单和跨浏览器兼容的方法是什么?

如果文本框的值是014或065,那么它应该只返回14或65

265193 次浏览

Regexp:

"014".replace(/^0+/, '')

不清楚你为什么要这样做。如果你想得到正确的数值,你可以使用 一元 + < em > < sup > [ docs ] :

value = +value;

如果您只想格式化文本,那么正则表达式可能更好。要我说,这取决于你所处理的价值观。如果只有整数,那么

input.value = +input.value;

也很好。当然,它也适用于浮点值,但这取决于点后面有多少位数字,将其转换为数字并返回字符串可以(至少在显示时)删除一些数字。

我们可以使用四种方法进行这种转换

  1. 使用 10的 parseInt
  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 < sup > 53-1 (Number.MAX_SAFE_INTEGER)。

console.log(Number.MAX_SAFE_INTEGER);

Now, lets consider the number string '099999999999999999999' and try to convert it using the above methods

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 < sup > 53 的数字,最近添加了原语 BigInt。请检查 BigInt给你的浏览器兼容性。

转换代码如下所示。

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

附注: 为什么基数对 parseInt很重要?

如果基数未定义或0(或不存在) ,JavaScript 假定如下:

  • 如果输入字符串以“0X”或“0X”开头,那么基数是16(十六进制) ,字符串的其余部分将被解析
  • 如果输入字符串以“0”开头,则基数为8(八进制)或10(十进制)
  • 如果输入字符串以任何其他值开头,则基数为10(十进制)

具体选择哪个基数取决于实现。ECMAScript 5指定使用10(十进制) ,但并非所有浏览器都支持这一点。

因此,使用 parseInt 时始终指定基数