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

Javascript将零添加到字符串的开头(最大长度为4个字符),javascript,Javascript,应该让他一个人呆着 var number = 1310; 应改为“0120” 应改为“0010” 应改为“0007” 带零的功能板(数字、长度){ var my_string=''+数字; while(my_string.length>>var N=数学功率(10,4) >>>变量编号=1310 >>>数字>>变量编号=120 >>>数字>>变量数=10 >>>数字

应该让他一个人呆着

var number = 1310;
应改为“0120”

应改为“0010”

应改为“0007”

带零的功能板(数字、长度){
var my_string=''+数字;
while(my_string.length

在旧的IE版本中可能不起作用。

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

function pad(n, len) {
  return (new Array(len + 1).join('0') + n).slice(-len);
}
//要填充四个位置:
>>>var N=数学功率(10,4)
>>>变量编号=1310
>>>数字>>变量编号=120
>>>数字>>变量数=10
>>>数字
等等。您可以很容易地将其转换为函数:

// 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"
…
/**
*用前导零将数字填充到“填充”位置:
*
*@param number:要填充的编号
*@param pad:前导零的最大数量
*/
功能焊盘编号(编号,焊盘){
var N=数学功率(10,pad);
返回编号
用法:

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

还有一种方法。来自于我所做的一些事情,需要在一个页面上加载数千次。将一串零硬编码一次,然后根据需要对焊盘进行任意次数的切碎,这是非常高效的CPU处理。我真的很喜欢10方法的威力——它非常灵活

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

对于原始问题,选择一个案例

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

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

  • 零字符串中的零数量为所需的长度+1
  • 起始数字中的位数小于或等于所需长度
背景故事:

我有一个案件,需要一个固定长度(14位)零填充数字。我想看看我能做得多简单。它在一个页面负载上运行数万次,因此效率很重要。它不是像现在这样可重复使用,而且有点不雅观。只是它非常简单

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

还请注意,string.substring()不同于string.substr()

// 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提取零,并继续将零提取到必要的长度14。只要第三行中的“14”是一个小于零字符串中字符数的整数,它就可以工作

使用String.JS librairy函数padLeft:

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

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

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

函数零位(num){
返回num.toString().padStart(4,“0”);
}
变量数=[1310,120,10,7];
数字。forEach(
函数(num){
var paddedNum=零填充(num);
log(paddedNum);
}
);无循环,无函数

numberStr.padStart(4, "0");

内特,作为我找到的最好的方式,它只是太长了,无法阅读。因此,我为您提供了3个简单的解决方案

1。下面是我对内特答案的简化。

let n = "" + 100;
let x = ("0000000000" + n).substring(n.length);//add your amount of zeros
alert(x + "-" + x.length);
//number = 42
"0000".substring(number.toString().length, 4) + number;
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"
2。这里有一个解决方案,通过使用一个在参数中获取数字和所需长度的函数,使其更易于重用。

let n = "" + 100;
let x = ("0000000000" + n).substring(n.length);//add your amount of zeros
alert(x + "-" + x.length);
//number = 42
"0000".substring(number.toString().length, 4) + number;
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。第三种解决方案是扩展数字原型。

let n = "" + 100;
let x = ("0000000000" + n).substring(n.length);//add your amount of zeros
alert(x + "-" + x.length);
//number = 42
"0000".substring(number.toString().length, 4) + number;
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"
试试这些:

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

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


我为此编写了一个通用函数。它采用输入控件和焊盘长度作为输入

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

使用RegExp/JavaScript:

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

控制台日志(编号)难道你不想将1310转换为字符串“1310”,就像将所有其他大小写转换为字符串一样吗?我同意西姆·维达斯的观点——我下面的答案就可以做到这一点。请参阅:请看这个方法比较:+1,从IE 4.0开始就可以了。如果您不需要它是动态的,一种更简单的方法是
(“0000”+n).slice(-4)
@Andy yes如果我在编码它,我可能只会初始化一个20或30个零的字符串并使用它。这听起来很直观,但不知何故对我不起作用0'+str即使在我键入时也不会附加前导0
padStart
(如下面@LifeHack所建议的)是一个很好的内置函数,可以工作。这很简单,一定是答案。简单但功能强大,谢谢
(number+'').padStart(4,'0');
function padLeft(input, padLength) {

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

}