【问题标题】:Remove/ truncate leading zeros by javascript/jquery通过 javascript/jquery 删除/截断前导零
【发布时间】:2011-11-26 05:15:03
【问题描述】:

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

【问题讨论】:

  • 字符串为“000000000”时会发生什么
  • 该数字是否应该始终为整数,或者它应该处理带小数的数字(例如'00000.5')?
  • 它应该为任何给定的字符串提供工作。即“00000evsdd”应该给“evsdd”,“00000.5”应该给“.5”

标签: javascript jquery numbers zero


【解决方案1】:

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

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

【讨论】:

  • @SomnathMuluk:这会让很多 JavaScript 程序员感到惊讶!
  • @Somnath,jQuery 是 javascript。如果某些东西在 javascript 中有效,那么如果您碰巧也在使用 jQuery,它将继续有效。
  • 为什么投反对票?如果你不解释你认为错误的地方,它就无法改进答案。
  • s = s.replace(/^0+/, '') 将“00”转换为“”(空字符串而不是一个零的字符串),这在大多数情况下是不可取的,最好将其封装在一个函数中并添加一行:if (s == "") s = "0";
  • 如果您全为零,则此正则表达式会出现问题,"0000"。这个问题可以通过积极的前瞻来解决:.replace(/^0+/, '')
【解决方案2】:

我会使用 Number() 函数:

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

或者我将我的字符串乘以 1

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

【讨论】:

  • 它不适用于大于 2^53 的值。 Number("009007199254740993").toString() 将是 "9007199254740992"
  • 好吧,面对必须删除大于“009007199254740993”的“字符串”中的前导零而不是看到解决方案的情况,我会印象深刻......就我个人而言,我宁愿放一个验证输入以告诉输入它的家伙他可能喝醉了,不应该发送
【解决方案3】:

可能有点晚了,但我想加我的 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"
  • 在处理小数字时这是一个非常干净的解决方案。感谢这个提示,2013 年的人! =D
【解决方案4】:

既然你说“任何字符串”,我假设这也是你想要处理的字符串。

"00012  34 0000432    0035"

所以,正则表达式是要走的路:

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

这将防止丢失“000000”值。

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

你可以看到working example here

【讨论】:

    【解决方案5】:
    parseInt(value) or parseFloat(value)
    

    这会很好地工作。

    【讨论】:

    • 虽然不是小数
    • @sburke0708 - 会吗?这就是 parseFloat 所做的。
    • 伟大的,帮助了我
    【解决方案6】:

    我得到了这个在 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>
    

    【讨论】:

    • 那不是很好的代码。对字符串长度的检查完全是多余的,它永远不会被评估为false。不需要使用9999 作为substr 的第二个参数。只需使用while (s.substr(0,1) == '0') s = s.substr(1);。此外,sn-p 的代码看起来很旧,script 标签的language 属性已被弃用很长时间,并且在script 标签中使用 cmets 只有不理解 @ 的浏览器才需要987654329@ 标记,例如Internet Explorer 1.0。
    【解决方案7】:

    只需尝试乘以如下:

    "00123" * 1; // 获取数字
    "00123" * 1 + ""; // 获取字符串

    【讨论】:

      【解决方案8】:

      试试这个,

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

      更多here

      【讨论】:

      • 给定的字符串值有问题
      • @SomnathMuluk:什么问题。这是工作示例jsfiddle.net/AxeUU
      【解决方案9】:

      1.最明确的就是使用parseInt():

      parseInt(number, 10)
      

      2.另一种方法是使用+一元运算符:

      +number
      

      3.你也可以走正则表达式路线,像这样:

      number.replace(/^0+/, '')
      

      【讨论】:

        【解决方案10】:

        您应该使用“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 引擎可能会将其用作八进制 parseInt('015') => 0

        【讨论】:

          【解决方案11】:

          如果数字是 int 使用

          "" + parseInt(str)
          

          如果数字是浮点数使用

          "" + parseFloat(str)
          

          【讨论】:

            【解决方案12】:

            常量数 = '0000007457841'; console.log(+number) //7457841;

            OR number.replace(/^0+/, '')

            【讨论】:

              【解决方案13】:

              来自Guffa 的正则表达式解决方案,但至少保留一个字符

              "123".replace(/^0*(.+)/, '$1'); // 123
              "012".replace(/^0*(.+)/, '$1'); // 12
              "000".replace(/^0*(.+)/, '$1'); // 0
              

              【讨论】:

                【解决方案14】:

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

                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)

                【讨论】:

                  【解决方案15】:
                  const input = '0093';
                  const match = input.match(/^(0+)(\d+)$/);
                  const result = match && match[2] || input;
                  

                  【讨论】:

                    【解决方案16】:

                    使用“数学.abs”

                    例如:Math.abs(003) = 3;

                    console.log(Math.abs(003))

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2021-06-06
                      • 1970-01-01
                      相关资源
                      最近更新 更多