从Javascript中的数字中删除前导零

tes*_*dtv 126 html javascript parseint

可能重复:
在Javascript中截断字符串的前导零

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

例如,如果我有一个文本框值为014或065,它应该只返回14或65

nav*_*een 200

试试parseInt.

parseInt("065", 10);
Run Code Online (Sandbox Code Playgroud)


第二个参数是基数,根据文档,应始终指定.MDN说,

基数

一个整数,表示上述字符串的基数.始终指定此参数以消除读者混淆并保证可预测的行为.当未指定基数时,不同的实现会产生不同的结果.
.............
.............
如果基数未定义或0(或不存在),JavaScript假定如下:

  • 如果输入字符串以"0x"或"0X"开头,则基数为16(十六进制),并解析字符串的其余部分.
  • 如果输入字符串以"0"开头,则基数为八(八进制)或10(十进制).究竟选择哪个基数是依赖于实现的.ECMAScript 5指定使用10(十进制),但并非所有浏览器都支持此功能.因此,在使用parseInt时始终指定基数.
  • 如果输入字符串以任何其他值开头,则基数为10(十进制).

例如,在一些实现parseInt("01803")中将产生1.假设目标是获取1803,调用基数为10的parseInt以确保解析在基本十进制编号系统中完成.那就是:parseInt("01803", 10)会屈服1803.请注意,对于非整数值,parseInt()将对数字进行舍入以作为整数返回.paseInt("018.03", 10)会屈服18.

  • 可能想提一下基数很重要,这样人们就不会犯格雷格那样的错误. (9认同)
  • 从问题中不清楚是否曾经如此,但这也会删除小数点后的任何内容. (3认同)
  • parseInt("08")== 0,这是一个错误,使用另一个答案. (3认同)
  • @格雷格.谢谢(你的)信息.但我没有得到相关性.`parseInt("08",10)`确实是'8` (2认同)
  • 这对于表示为字符串的大数字不起作用. (2认同)

key*_*one 164

正则表达式:

"014".replace(/^0+/, '')
Run Code Online (Sandbox Code Playgroud)

  • 糟糕的是,当用户可能希望将该值保持为零时,它会将"0"变为"". (13认同)
  • @Devid:为此,更简单的一个使用正向前瞻断言`replace(/ ^ 0 +(?=\d)/,'')` (13认同)
  • 最好的解决方案,如果你有一个像012A(街道号码)的字符串,这是要走的路.TY (6认同)
  • @HermannIngjaldsson:对于可以使用的负面前瞻`replace(/^(?!0$)0+/, '')` (2认同)
  • 应该将@PranavCBalan标记为正确答案,谢谢 (2认同)

Fel*_*ing 23

目前尚不清楚为什么要这样做.如果要获得正确的数值,可以使用一元+ [docs]:

value = +value;
Run Code Online (Sandbox Code Playgroud)

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

input.value = +input.value;
Run Code Online (Sandbox Code Playgroud)

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

  • @hmthr:你没有给`x`分配一个字符串,而是一个数字.前导零将被解释为八进制值.打印`x`,你会看到这个值已经是'13`.使用字符串有效:http://jsfiddle.net/fkling/8pYXH/1/ (2认同)