使用 jQuery 在数字前添加额外的零?

IT技术 javascript
2021-03-19 23:50:28

我有上传的文件,格式如下

先生 1

先生 2

先生 100

200 先生

300 先生

等等。

我需要做的是在 MR 10 之前添加额外的两个 00,并在 MR10-99 之前添加一个额外的 0

所以文件被格式化

001先生

010 先生

076 先生

等等。

任何帮助都会很棒!

6个回答

假设您将这些值存储在某些字符串中,请尝试以下操作:

function pad (str, max) {
  str = str.toString();
  return str.length < max ? pad("0" + str, max) : str;
}

pad("3", 3);    // => "003"
pad("123", 3);  // => "123"
pad("1234", 3); // => "1234"

var test = "MR 2";
var parts = test.split(" ");
parts[1] = pad(parts[1], 3);
parts.join(" "); // => "MR 002"
我知道这是旧的,但这个功能帮助了我,我想我会添加它。这将为整数或浮点变量执行类型转换,这意味着您可以pad(85, 5)pad("85", 5).return (str).toString().length < max ? pad("0" + (str).toString(), max) : (str).toString();
2021-04-25 23:50:28
@RémiBreton 您的函数使用了太多次.toString()我认为会更好function pad (str, max) { str=str.toString(); function main(str,max){ return str.length < max ? main("0" + str, max) : str; } return main(str,max); }
2021-05-11 23:50:28
String.prototype.padLeft = function padLeft(length, LeadershipChar) { if (leadingChar === undefined)leadingChar = "0"; 返回 this.length < 长度?(leaderChar + this).padLeft(length,leadingChar) : this; };
2021-05-14 23:50:28

我有一个我认为相关的潜在解决方案,我在这里发布了它:

https://www.facebook.com/antimatterstudios/posts/10150752380719364

基本上,您希望最小长度为 2 或 3,您可以调整在这段代码中放入多少个 0

var d = new Date();
var h = ("0"+d.getHours()).slice(-2);
var m = ("0"+d.getMinutes()).slice(-2);
var s = ("0"+d.getSeconds()).slice(-2);

我知道我总是会得到一个最小的整数(因为第 1 小时,第 2 小时)等等,但是如果你不能确定得到一个空字符串以外的任何东西,你可以做 "000"+d.getHours( ) 以确保您获得最小值。

那么你想要3个数字?只需在我的代码中使用 -3 而不是 -2,我写这个只是因为我想以一种超级简单的方式构建一个 24 小时制时钟。

注意: 如果您使用的是最新的 ECMAScript,请参阅更新 2 ...


这是一个我喜欢的解决方案,因为它很简单,可以回答类似问题

var n = 123

String('00000' + n).slice(-5); // returns 00123
('00000' + n).slice(-5);       // returns 00123

更新

正如@RWC 建议的那样,您当然可以将其很好地包装在这样的通用函数中:

function leftPad(value, length) { 
    return ('0'.repeat(length) + value).slice(-length); 
}

leftPad(123, 5); // returns 00123

对于那些不喜欢切片的人:

function leftPad(value, length) {
    value = String(value);
    length = length - value.length;
    return ('0'.repeat(length) + value)
}

但是,如果性能很重要,我建议在选择建议的解决方案之一之前通读链接的答案。

更新 2

在 ES6 中,String 类现在带有一个内置padStart方法,可以将前导字符添加到字符串中。在此处查看 MDN以供参考String.prototype.padStart()还有padEnd一种结束字符方法。

所以在 ES6 中它变得如此简单:

var n = 123;
n.padStart(5, '0'); // returns 00123
改进版本:function leftPad(value, maxLength) { return String('0'.repeat(maxLength) + value).slice(-maxLength); }
2021-04-24 23:50:28
function addLeadingZeros (n, length)
{
    var str = (n > 0 ? n : -n) + "";
    var zeros = "";
    for (var i = length - str.length; i > 0; i--)
        zeros += "0";
    zeros += str;
    return n >= 0 ? zeros : "-" + zeros;
}

//addLeadingZeros (1, 3) =   "001"
//addLeadingZeros (12, 3) =  "012"
//addLeadingZeros (123, 3) = "123"
换句话说:将其转换为字符串,然后用零填充
2021-05-02 23:50:28

这是我通常在代码中用于在数字或字符串前添加零的函数。

输入是字符串或数字 (str),以及所需的输出长度 (len)。

var PrependZeros = function (str, len) {
    if(typeof str === 'number' || Number(str)){
    str = str.toString();
    return (len - str.length > 0) ? new Array(len + 1 - str.length).join('0') + str: str;
}
else{
    for(var i = 0,spl = str.split(' '); i < spl.length; spl[i] = (Number(spl[i])&& spl[i].length < len)?PrependZeros(spl[i],len):spl[i],str = (i == spl.length -1)?spl.join(' '):str,i++);
    return str;
}

};

例子:

PrependZeros('MR 3',3);    // MR 003
PrependZeros('MR 23',3);   // MR 023
PrependZeros('MR 123',3);  // MR 123
PrependZeros('foo bar 23',3);  // foo bar 023