【问题标题】:Javascript adding zeros to the beginning of a string (max length 4 chars)Javascript 在字符串的开头添加零(最大长度 4 个字符)
【发布时间】:2011-01-18 15:49:24
【问题描述】:
var number = 1310;

应该独自一人。

var number = 120;

应改为“0120”;

var number = 10;

应改为“0010”;

var number = 7;

应改为“0007”;

【问题讨论】:

标签: javascript


【解决方案1】:

在您可以使用的所有现代浏览器中

numberStr.padStart(4, "0");

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

function zeroPad(num) {
  return num.toString().padStart(4, "0");
}

var numbers = [1310, 120, 10, 7];

numbers.forEach(
  function(num) {        
    var paddedNum = zeroPad(num);

    console.log(paddedNum);
  }
);

【讨论】:

  • 这个很简单,一定是答案。
【解决方案2】:
function pad_with_zeroes(number, length) {

    var my_string = '' + number;
    while (my_string.length < length) {
        my_string = '0' + my_string;
    }

    return my_string;

}

【讨论】:

  • 这听起来很直观,但不知何故对我不起作用。 '0' + str 即使在我进行类型转换时也不会附加前导 0。 padStart(由下面的@LifeHack 建议)是一个很好的内置函数。
【解决方案3】:

试试这些:

('0000' + number).slice(-4);

(number+'').padStart(4,'0');

【讨论】:

    【解决方案4】:

    这是另一种方式。来自我所做的需要在页面加载时完成数千次的操作。一次硬编码一串零的 CPU 效率非常高,并根据需要多次为 pad 切分。我真的很喜欢 10 方法的强大功能——它非常灵活。

    无论如何,这是我能想到的最有效的方法:

    对于原始问题,选择其中一种情况...

    var number = 1310;
    var number = 120;
    var number = 10;
    var number = 7;
    

    然后

    // only needs to happen once 
    var zeroString = "00000";
    
    // one assignment gets the padded number
    var paddedNum = zeroString.substring((number + "").length, 4) + bareNum;
    
    //output
    alert("The padded number string is: " + paddedNum);
    

    当然,您仍然需要验证输入。因为这只在以下条件下可靠地工作:

    • zeroString 中的零个数是desired_length + 1
    • 您的起始数字中的位数小于或等于您想要的长度

    背景故事:

    我有一个案例需要一个固定长度(14 位)的零填充数字。我想看看我能做到这一点。它在页面加载时运行数万次,因此效率很重要。它不能按原样重复使用,而且有点不雅。除了它非常非常简单。

    对于所需的 n 位填充字符串,此方法需要(至少)n+1 个零的字符串。索引 0 是字符串中的第一个字符,它永远不会被使用,所以实际上,它可以是任何东西。

    还要注意 string.substring()string.substr() 不同!

    var bareNum = 42 + '';  
    var zeroString = "000000000000000";
    var paddedNum = zeroString.substring(bareNumber.length, 14) + bareNum
    

    这会从与字符串长度匹配的位置开始从 zeroString 中提取零,并继续获取零到必要的长度 14。只要第三行中的“14”是小于数字的整数zeroString 中的字符,它将起作用。

    【讨论】:

      【解决方案5】:
      function pad(n, len) {
        return (new Array(len + 1).join('0') + n).slice(-len);
      }
      

      可能不适用于旧版 IE。

      【讨论】:

      • +1,从 IE 4.0 开始可以正常工作。如果您不需要它是动态的,一种更简单的方法是("0000" + n).slice(-4);
      • @Andy 是的,如果我正在编码它,我可能只是初始化一个 20 或 30 个零的字符串并使用它。
      【解决方案6】:
      //to: 0 - to left, 1 - to right
      String.prototype.pad = function(_char, len, to) {
          if (!this || !_char || this.length >= len) {
              return this;
          }
          to = to || 0;
      
          var ret = this;
      
          var max = (len - this.length)/_char.length + 1;
          while (--max) {
              ret = (to) ? ret + _char : _char + ret;
          }
      
          return ret;
      };
      

      用法:

      someString.pad(neededChars, neededLength)
      

      例子:

      '332'.pad('0', 6); //'000332'
      '332'.pad('0', 6, 1); //'332000'
      

      【讨论】:

        【解决方案7】:

        我喜欢的一种方法是在数字上加上 10^N,其中 N 是您想要的零的数量。将结果数字视为字符串并切掉第零位。当然,如果您的输入数字可能大于您的填充长度,您需要小心,但它仍然比循环方法快得多:

        // You want to pad four places:
        >>> var N = Math.pow(10, 4)
        >>> var number = 1310
        >>> number < N ? ("" + (N + number)).slice(1) : "" + number
        "1310"
        >>> var number = 120
        >>> number < N ? ("" + (N + number)).slice(1) : "" + number
        "0120"
        >>> var number = 10
        >>> number < N ? ("" + (N + number)).slice(1) : "" + number
        "0010"
        …
        

        等等。你可以很容易地把它变成一个函数:

        /**
         * Pad a number with leading zeros to "pad" places:
         *
         * @param number: The number to pad
         * @param pad: The maximum number of leading zeros
         */
        function padNumber(number, pad) {
            var N = Math.pow(10, pad);
            return number < N ? ("" + (N + number)).slice(1) : "" + number
        }
        

        【讨论】:

          【解决方案8】:

          没有循环,没有函数

          let n = "" + 100;
          let x = ("0000000000" + n).substring(n.length);//add your amount of zeros
          alert(x + "-" + x.length);
          

          【讨论】:

            【解决方案9】:

            Nate 是我发现的最佳方式,但阅读时间太长了。所以我为你提供了3个简单的解决方案。

            1.所以这是我对 Nate 答案的简化。

            //number = 42
            "0000".substring(number.toString().length, 4) + number;
            

            2。这是一个解决方案,它通过使用一个函数来获取参数中的数字和所需长度,从而使其更易于重用。

            function pad_with_zeroes(number, len) {
              var zeroes = "0".repeat(len);
              return zeroes.substring(number.toString().length, len) + number;
            }
            
            // Usage: pad_with_zeroes(42,4);
            // Returns "0042"
            

            3.这是第三种解决方案,扩展 Number 原型。

            Number.prototype.toStringMinLen = function(len) {
              var zeroes = "0".repeat(len);
              return zeroes.substring(self.toString().length, len) + self;
            }
            
            //Usage: tmp=42; tmp.toStringMinLen(4)
            

            【讨论】:

              【解决方案10】:

              我为此编写了一个通用函数。它需要一个输入控件和填充长度作为输入。

              function padLeft(input, padLength) {
              
                  var num = $("#" + input).val();
                  $("#" + input).val(('0'.repeat(padLength) + num).slice(-padLength));
              
              }
              

              【讨论】:

                【解决方案11】:

                使用 RegExp/JavaScript:

                var number = 7;
                number = ('0000'+number).match(/\d{4}$/);
                console.log(number);

                使用函数/RegExp/JavaScript:

                var number = 7;
                
                function padFix(n) {
                  return ('0000'+n).match(/\d{4}$/);
                }
                
                console.log(padFix(number));

                【讨论】:

                  【解决方案12】:

                  使用String.JS库函数padLeft:

                  S('123').padLeft(5, '0').s   --> 00123
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-11-23
                    • 2019-01-10
                    • 1970-01-01
                    • 2014-02-04
                    • 2012-07-09
                    • 1970-01-01
                    相关资源
                    最近更新 更多