Thêm số 0 thừa vào trước một số bằng jQuery?


81

Tôi có tệp được tải lên có định dạng như vậy

ÔNG 1

ÔNG 2

MR 100

MR 200

MR 300

VÂN VÂN.

Những gì tôi cần làm là thêm hai 00s trước bất kỳ thứ gì trước MR 10 và thêm một 0 phụ trước MR10-99

Vì vậy, các tệp được định dạng

MR 001

MR 010

ÔNG 076

VÂN VÂN.

Bất kỳ sự trợ giúp nào đều sẽ là tuyệt vời!


3
jQuery sẽ không giúp bạn ở đây (ít nhất là không giúp ích cho công cụ định dạng) ... nhưng làm cách nào để bạn truy cập tệp? Làm thế nào để bạn có được nội dung của nó? Không hiểu sao bối cảnh không rõ ràng. Vui lòng cung cấp ít nhất một số mã để chúng tôi có thể hiểu vấn đề tốt hơn.
Felix Kling

@FelixKling Các tệp không liên quan. Anh ấy đang hỏi về định dạng.
felwithe

Câu trả lời:


214

Giả sử bạn có các giá trị đó được lưu trữ trong một số chuỗi, hãy thử điều này:

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"

3
Tôi biết điều này đã cũ, nhưng chức năng này đã giúp tôi và tôi nghĩ rằng tôi sẽ thêm vào nó. Điều này sẽ thực hiện chuyển đổi loại hình cho số nguyên hoặc float biến, có nghĩa là bạn có thể làm pad(85, 5)cũng như pad("85", 5). return (str).toString().length < max ? pad("0" + (str).toString(), max) : (str).toString();
Rémi Breton

7
@ RémiBreton Chức năng của bạn sử dụng quá nhiều lần .toString(). Tôi nghĩ nó sẽ tốt hơnfunction pad (str, max) { str=str.toString(); function main(str,max){ return str.length < max ? main("0" + str, max) : str; } return main(str,max); }
Oriol

2
String.prototype.padLeft = function padLeft (length, leadChar) {if (leadChar === undefined) leadChar = "0"; trả về this.length <length? (leadChar + this) .padLeft (length, leadChar): this; };
Tim Valentine

34

Tôi có một giải pháp tiềm năng mà tôi đoán là có thể giải quyết được, tôi đã đăng về nó ở đây:

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

về cơ bản, bạn muốn độ dài tối thiểu là 2 hoặc 3, bạn có thể điều chỉnh số lượng 0 mà bạn đặt trong đoạn mã này

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

Tôi biết tôi sẽ luôn nhận được một số nguyên duy nhất ở mức tối thiểu (nguyên nhân là giờ 1, giờ 2), v.v., nhưng nếu bạn không thể chắc chắn nhận được bất kỳ thứ gì ngoài một chuỗi rỗng, bạn chỉ có thể thực hiện "000" + d.getHours ( ) để đảm bảo bạn nhận được mức tối thiểu.

sau đó bạn muốn 3 số? chỉ cần sử dụng -3 thay vì -2 trong mã của tôi, tôi chỉ viết điều này vì tôi muốn tạo đồng hồ 24 giờ theo cách siêu dễ dàng.


21

Lưu ý: xem Bản cập nhật 2 nếu bạn đang sử dụng ECMAScript mới nhất ...


Đây là một giải pháp tôi thích vì sự đơn giản của nó từ một câu trả lời cho một câu hỏi tương tự :

var n = 123

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

CẬP NHẬT

Như @RWC đã đề xuất, tất nhiên, bạn có thể kết hợp điều này một cách độc đáo trong một hàm chung như thế này:

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

leftPad(123, 5); // returns 00123

Và đối với những người không thích lát:

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

Nhưng nếu hiệu suất quan trọng, tôi khuyên bạn nên đọc qua câu trả lời được liên kết trước khi chọn một trong các giải pháp được đề xuất.

CẬP NHẬT 2

Trong ES6, lớp String bây giờ đi kèm với một padStartphương thức có sẵn để thêm các ký tự đứng đầu vào một chuỗi. Kiểm tra MDN tại đây để tham khảo String.prototype.padStart(). Và cũng có một padEndphương pháp cho các ký tự kết thúc.

Vì vậy, với ES6, nó trở nên đơn giản như:

var n = 123;
n.padStart(5, '0'); // returns 00123

3
Phiên bản cải tiến: function leftPad (value, maxLength) {return String ('0'.repeat (maxLength) + value) .slice (-maxLength); }
RWC

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"

Nói cách khác: chuyển nó thành một chuỗi, sau đó đệm bằng các số không .
pavium

4

Đây là hàm mà tôi thường sử dụng trong mã của mình để thêm các số không vào một số hoặc chuỗi.

Các đầu vào là chuỗi hoặc số (str) và độ dài mong muốn của đầu ra (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;
}

}

Ví dụ:

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

2

Nếu bạn tách trên khoảng trắng, bạn có thể thêm các số 0 ở đầu bằng một hàm đơn giản như:

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

Vì vậy, bạn có thể kiểm tra độ dài của chuỗi và nếu nó nhỏ hơn 6, hãy chia nhỏ trên khoảng trắng, thêm các số không vào số, sau đó nối lại với nhau.

Hoặc dưới dạng một biểu thức chính quy:

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

Tôi chắc rằng ai đó có thể làm điều đó với một thay thế, không phải hai.

Chỉnh sửa - ví dụ

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

Nó sẽ đặt một hoặc hai số không đứng trước một số ở cuối một chuỗi với khoảng trắng phía trước nó. Nó không quan tâm bit trước khoảng trống là gì.


Chuyện gì xảy ra nếu nói ai đó nếu một tài liệu có MR 003 chúng ta có thể bỏ qua thêm 0s, vv
Chill Web Designs

2

Chỉ để cười, hãy làm điều đó một cách khó chịu kéo dài ....:
(LƯU Ý: Tôi chưa sử dụng cái này, và tôi sẽ không khuyên bạn nên dùng cái này.!)

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

1

Bản thân tôi ngày trước cũng cần một thứ như thế này, Pud thay vì luôn luôn là 0, tôi muốn có thể nói với nó những gì tôi muốn độn ở phía trước. Đây là những gì tôi nghĩ ra cho mã:

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

Trong đó n là những gì bạn muốn đệm, e là sức mạnh bạn muốn nó được đệm (số ký tự phải có) và d là những gì bạn muốn nó được đệm. Có vẻ như hoạt động tốt cho những gì tôi cần, nhưng nó sẽ không thành công nếu "d" dài hơn một ký tự trong một số trường hợp.



1

str có thể là một số hoặc một chuỗi.

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

Thêm nhiều số 0 hơn nếu cần chữ số lớn


0

Nói một cách dễ hiểu, chúng ta có thể viết như sau,

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

// Bởi vì hầu hết thời gian chúng ta cần điều này cho ngày, tháng hoặc số lượng quan trọng.


0

Biết đây là một bài viết cũ, nhưng đây là một cách ngắn gọn, hiệu quả khác: số không

chỉnh sửa: dur. nếu num không phải là chuỗi, bạn sẽ thêm:

len -= String(num).length;

khác, tất cả đều tốt

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

0

Bằng cách thêm 100 vào số, sau đó chạy một hàm chuỗi con từ chỉ mục 1 đến vị trí cuối cùng bên phải.

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

bạn sẽ nhận được kết quả này từ ngày 2020-11-3

11,03

Tôi hy vọng câu trả lời là hữu ích


-1

Hãy thử làm theo cách sau, sẽ chuyển đổi các số có một và hai chữ số thành các số có 3 chữ số bằng cách bắt đầu các số không.

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

Mặc dù mã này có thể cung cấp giải pháp cho câu hỏi, nhưng tốt hơn là bạn nên thêm ngữ cảnh về lý do / cách nó hoạt động. Điều này có thể giúp người dùng trong tương lai học và áp dụng kiến ​​thức đó vào mã của riêng họ. Bạn cũng có khả năng nhận được phản hồi tích cực từ người dùng dưới dạng phiếu ủng hộ, khi mã được giải thích.
borchvm

Ghi chú và sửa đổi cho phù hợp.
vivek shirodkar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.