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

时间:2011-06-24 09:48:38

标签: javascript

我上传的文件格式如此

  

MR 1

     

MR 2

     

MR 100

     

MR 200

     

MR 300

     

ETC。

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

所以文件格式化

  

MR 001

     

MR 010

     

MR 076

     

ETC。

任何帮助都会很棒!

14 个答案:

答案 0 :(得分:192)

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

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"

答案 1 :(得分:32)

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

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小时的时钟。

答案 2 :(得分:14)

这是我喜欢的解决方案,因为它来自an answer to a similar question

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

但如果表现很重要,我建议您在选择其中一个解决方案之前阅读相关答案。

答案 3 :(得分:7)

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"

答案 4 :(得分:4)

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

输入是字符串或数字(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

答案 5 :(得分:2)

如果您在空格上拆分,可以使用以下简单函数添加前导零:

function addZeros(n) {
  return (n < 10)? '00' + n : (n < 100)? '0' + n : '' + n;
}

因此,您可以测试字符串的长度,如果它小于6,则在空格上拆分,为数字添加零,然后将其重新连接在一起。

或者作为正则表达式:

function addZeros(s) {
  return s.replace(/ (\d$)/,' 00$1').replace(/ (\d\d)$/,' 0$1');
}

我确信有人可以用一个替换而不是两个。

编辑 - 示例

alert(addZeros('MR 3'));    // MR 003
alert(addZeros('MR 23'));   // MR 023
alert(addZeros('MR 123'));  // MR 123
alert(addZeros('foo bar 23'));  // foo bar 023

它会在字符串末尾放置一个或两个零的数字,前面有一个空格。它并不关心空间之前的位数。

答案 6 :(得分:2)

只是为了笑,这是长期讨厌的方式....: (注意:我没有使用过这个,我不建议使用它。!)

function pad(str, new_length) {
    ('00000000000000000000000000000000000000000000000000' + str).
    substr((50 + str.toString().length) - new_length, new_length)
}

答案 7 :(得分:1)

我前几天需要这样的东西,Pud而不是总是0,我想能够告诉它我想要填充前面的东西。以下是我提出的代码:

function lpad(n, e, d) {
  var o = ''; if(typeof(d) === 'undefined'){ d='0'; } if(typeof(e) === 'undefined'){ e=2; }
  if(n.length < e){ for(var r=0; r < e - n.length; r++){ o += d; } o += n; } else { o=n; }
  return o; }

其中n是你想要填充的东西,e是你想要填充的力量(它应该是多长的字符数),d是你想要填充的东西。似乎能够很好地满足我的需求,但如果&#34; d&#34;在某些情况下,不止一个字符长。

答案 8 :(得分:1)

{{1}}

它对我有用! 要增加零,请更新“最大”变量

工作小提琴网址:Adding extra zeros in front of a number using jQuery?

答案 9 :(得分:1)

  

str可以是数字或字符串。

formatting("hi",3);
function formatting(str,len)
{
   return ("000000"+str).slice(-len);
}

如果需要大数字,请添加更多

答案 10 :(得分:0)

简单来说,我们可以写成如下,

for(var i=1;i<=31;i++)
    i=(i<10) ? '0'+i : i;

//因为大部分时间我们都需要这一天,月份或金额。

答案 11 :(得分:0)

知道这是一个老帖子,但这是另一个简短有效的方法: zeros

编辑:dur。如果num不是字符串,则添加:

len -= String(num).length;

否则,一切都很好

function addLeadingZeros(sNum, len) {
    len -= sNum.length;
    while (len--) sNum = '0' + sNum;
    return sNum;
}

答案 12 :(得分:0)

通过将数字加100,然后运行一个从索引1到右侧最后一个位置的子字符串函数。

var dt = new Date();
var month = (100 + dt.getMonth()+1).toString().substr(1, 2);
var day = (100 + dt.getDate()).toString().substr(1, 2);

console.log(month,day);

从2020-11-3起您将获得此结果

11,03

我希望答案是有用的

答案 13 :(得分:-1)

尝试以下方法,该操作将通过将零前缀转换为将一位数字和两位数字转换为3位数字。

var base_number = 2;
var zero_prefixed_string = ("000" + base_number).slice(-3);