我上传的文件格式如下
先生1
先生2
先生100
MR 200
MR 300
等等。
我需要做的是在MR 10之前的任何内容前添加两个额外的00,在MR10-99之前的内容中添加一个额外的0。
因此文件已格式化
先生001
先生010
先生076
等等。
任何帮助将是巨大的!
Answers:
假设这些值存储在某些字符串中,请尝试以下操作:
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();
.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); }
我有一个可能的解决方案,我想这是无关紧要的,我在这里张贴了一下:
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)
}
但是,如果性能很重要,建议您在选择建议的解决方案之一之前通读链接的答案。
在ES6中,String类现在带有一个内置padStart方法,该方法将首字符添加到字符串中。在此处检查MDN以获取参考String.prototype.padStart()。还有一个padEnd一种结束字符方法。
因此,使用ES6,它变得非常简单:
var n = 123;
n.padStart(5, '0'); // returns 00123
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"
我通常在代码中使用此函数,以在数字或字符串前加零。
输入是字符串或数字(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
如果在空间上分割,则可以使用以下简单函数添加前导零:
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
它将在字符串末尾的数字前放置一个或两个零。不在乎空格是多少。
前几天我自己需要类似的东西,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是您要对其填充的内容。似乎可以很好地满足我的需求,但是在某些情况下,如果“ d”超过一个字符长,它将失败。
var str = "43215";
console.log("Before : \n string :"+str+"\n Length :"+str.length);
var max = 9;
while(str.length < max ){
str = "0" + str;
}
console.log("After : \n string :"+str+"\n Length :"+str.length);
它为我工作!要增加零,请更新“ max ”变量
工作提琴网址:使用jQuery在数字前添加额外的零?:
尝试执行以下操作,这将通过在前缀前面加上零将转换后的一位数字和两位数字转换为3位数字。
var base_number = 2;
var zero_prefixed_string = ("000" + base_number).slice(-3);