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
- 起始数字中的位数小于或等于所需长度
// 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即使在我键入时也不会附加前导0padStart
(如下面@LifeHack所建议的)是一个很好的内置函数,可以工作。这很简单,一定是答案。简单但功能强大,谢谢
(number+'').padStart(4,'0');
function padLeft(input, padLength) {
var num = $("#" + input).val();
$("#" + input).val(('0'.repeat(padLength) + num).slice(-padLength));
}