Javascript在字符串的开头添加零(最大长度为4个字符)

时间:2011-01-18 15:49:24

标签: javascript

var number = 1310;

应该保持不变。

var number = 120;

应更改为“0120”;

var number = 10;

应更改为“0010”;

var number = 7;

应更改为“0007”;

11 个答案:

答案 0 :(得分:28)

function pad_with_zeroes(number, length) {

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

    return my_string;

}

答案 1 :(得分:12)

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

numberStr.padStart(4, "0");

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

&#13;
&#13;
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);
  }
);
&#13;
&#13;
&#13;

答案 2 :(得分:9)

这是另一种方式。来自我所做的事情,需要在页面加载上进行数千次。一次对一串零码进行硬编码非常有效,并根据需要多次切换所需的数量。我真的很喜欢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中的字符,它将起作用。

答案 3 :(得分:5)

//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'

答案 4 :(得分:4)

function pad(n, len) {
  return (new Array(len + 1).join('0') + n).slice(-len);
}

可能无法在旧的IE版本中使用。

答案 5 :(得分:1)

我喜欢的方法是在数字中加上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
}

答案 6 :(得分:1)

尝试这些:

sh -ac

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

答案 7 :(得分:0)

没有循环,没有功能

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

答案 8 :(得分:0)

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.prototype.toStringMinLen = function(len) {
  var zeroes = "0".repeat(len);
  return zeroes.substring(self.toString().length, len) + self;
}

//Usage: tmp=42; tmp.toStringMinLen(4)

答案 9 :(得分:0)

我为此编写了一个通用函数。它以输入控件和打击垫长度作为输入。

function padLeft(input, padLength) {

    var num = $("#" + input).val();
    $("#" + input).val(('0'.repeat(padLength) + num).slice(-padLength));

}

答案 10 :(得分:-1)

使用String.JS librairy函数padLeft:

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