通过javascript / jquery删除/截断前导零


81

建议通过javascript,jquery从数字(任何字符串)中删除或截断前导零的解决方案。


4
字符串为“ 000000000”时会发生什么情况
罗伯特

该数字是否总是总是整数,还是应该使用小数点(例如'00000.5')处理数字?
Christian C.Salvadó11年

它应该给定给定的任何字符串。即“ 00000evsdd”应为“ evsdd”,“ 00000.5”应为“ .5”
Somnath Muluk

Answers:


192

您可以使用在字符串开头匹配零的正则表达式:

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

12
@SomnathMuluk:这会让很多JavaScript程序员感到惊讶!
伯特

@Guffa:我在jquery代码中使用它。可能是因为它可能无法正常工作。
Somnath Muluk

2
@ Somnath,jQuery是javascript。如果某些东西在javascript中有效,那么如果您碰巧也在使用jQuery,它将继续起作用。
安倍·米斯勒

5
为什么要投票?如果您不解释自己认为错误的地方,那将无法改善答案。
Guffa'3

2
s = s.replace(/ ^ 0 + /,``)会将“ 00”转换为“”(空字符串,而不是带有零英寸的字符串),这在大多数情况下是不可取的,最好将其封装在函数中添加以下行:if(s ==“”)s =“ 0”;
奥利弗·柯尼希

30

我将使用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

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

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。不需要将9999用作第二个参数substr。只需使用while (s.substr(0,1) == '0') s = s.substr(1);。此外,该代码段看起来真的很老,该标签的language属性script已被弃用了很长时间,并且script仅对于完全不了解该script标签的浏览器(例如Internet Explorer 1.0),才需要在标签内使用注释。
Guffa'3


2

试试这个,

   function ltrim(str, chars) {
        chars = chars || "\\s";
        return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
    }

    var str =ltrim("01545878","0");

这里更多


给定字符串值时遇到问题
Somnath Muluk

@SomnathMuluk:什么问题。这是工作示例jsfiddle.net/AxeUU
Gowri



1

如果数字是int使用

"" + parseInt(str)

如果数字是浮动的,请使用

"" + parseFloat(str)

0

没有正则表达式的另一种方式:

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;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.