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

58
var number = 1310;

应该被保留不变。

var number = 120;
应该改为 "0120"。
var number = 10;

应该更改为 "0010"。

var number = 7;

应该改为"0007"。


2
你不想将1310转换为字符串“1310”吗?就像你将所有其他情况都转换为字符串一样? - Šime Vidas
1
我同意Šime Vidas的观点 - 我下面的回答将会做到这一点。 - Kyle Wild
请参见:https://dev59.com/oHM_5IYBdhLWcg3wslbs - Thai
请参考以下方法的比较:http://jsperf.com/ways-to-0-pad-a-number - kojiro
12个回答

90

这很简单,答案必须是这个。 - sanjeev shetty

56
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所建议的)是一个很棒的内置函数,可以解决这个问题。 - Anupam

24

试试这些:

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

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

9
这里有另一种方法。源于我在页面加载时需要执行成千上万次的操作。硬编码一个零字符串,并根据需要多次切割,这是相当CPU高效的方式。我确实喜欢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);

当然,您仍需要验证输入。因为这只在以下情况下可靠地工作:
  • 零字符串中的零数为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中字符数的整数,它就会起作用。


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

在旧版IE中可能无法正常工作。


2
+1,从IE 4.0开始就可以正常工作。如果您不需要它是动态的,那么更简单的方法是("0000" + n).slice(-4); - Andy E
@Andy 是的,如果我在编码的话,我可能会只初始化一个包含20或30个零的字符串并使用它。 - Pointy

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'

2

使用 RegExp/JavaScript:

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

使用函数/正则表达式/JavaScript:

var number = 7;

function padFix(n) {
  return ('0000'+n).match(/\d{4}$/);
}

console.log(padFix(number));


2
我喜欢的方法是将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
}

1
我为此编写了一个通用函数。它以输入控件和填充长度作为输入参数。
function padLeft(input, padLength) {

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

}

0

没有循环,没有函数

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接