2011-01-18 29 views
15
var number = 1310; 

chỉ nên để một mình.Javascript thêm số không vào đầu chuỗi (tối đa 4 ký tự)

var number = 120; 

phải được đổi thành "0120";

var number = 10; 

phải được đổi thành "0010";

var number = 7; 

phải được đổi thành "0007";

+2

Bạn không muốn truyền 1310 đến chuỗi "1310", giống như bạn bỏ tất cả các trường hợp khác vào chuỗi? –

+1

Tôi đồng ý với Šime Vidas - câu trả lời của tôi dưới đây sẽ làm điều đó. –

+0

Vui lòng xem: http://stackoverflow.com/questions/1267283/how-can-i-create-a-zerofilled-value-using-javascript – Thai

Trả lời

20
function pad_with_zeroes(number, length) { 

    var my_string = '' + number; 
    while (my_string.length < length) { 
     my_string = '0' + my_string; 
    } 

    return my_string; 

} 
3
function pad(n, len) { 
    return (new Array(len + 1).join('0') + n).slice(-len); 
} 

có thể không hoạt động trong các phiên bản IE cũ.

+2

+1, sẽ hoạt động tốt từ IE 4.0 trở đi. Cách tiếp cận đơn giản hơn, nếu bạn không cần nó là động, là '(" 0000 "+ n) .slice (-4);' –

+0

@Andy yes nếu tôi viết mã, tôi có thể chỉ khởi tạo một chuỗi 20 hoặc 30 số không và sử dụng nó. – Pointy

1

Cách tiếp cận tôi muốn là thêm 10^N vào số, trong đó N là số số không bạn muốn. Xử lý số kết quả dưới dạng một chuỗi và cắt bớt số chữ số. Tất nhiên, bạn sẽ muốn cẩn thận nếu số đầu vào của bạn có thể lớn hơn chiều dài pad của bạn, nhưng nó vẫn nhanh hơn nhiều so với phương pháp lặp:

// 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" 
… 

vv Bạn có thể làm điều này vào một chức năng một cách dễ dàng đủ :

/** 
* Pad a number with leading zeros to "pad" places: 
* 
* @param number: The number to pad 
* @param pad: The maximum number of leading zeros 
*/ 
function padNumber(number, pad) { 
    var N = Math.pow(10, pad); 
    return number < N ? ("" + (N + number)).slice(1) : "" + number 
} 
4
//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; 
}; 

Cách sử dụng:

someString.pad(neededChars, neededLength) 

Ví dụ:

'332'.pad('0', 6); //'000332' 
'332'.pad('0', 6, 1); //'332000' 
6

Dưới đây là một cách khác. Xuất phát từ một cái gì đó tôi đã làm điều đó cần phải được thực hiện hàng ngàn lần trên một tải trang. Đó là khá CPU hiệu quả để mã cứng một chuỗi số 0 một lần, và chặt như nhiều như bạn cần cho pad nhiều lần khi cần thiết. Tôi thực sự thích sức mạnh của 10 phương pháp - điều đó khá linh hoạt.

Dù sao, đây là hiệu quả như tôi có thể đưa ra:

Đối với câu hỏi ban đầu, chọn một trong các trường hợp ...

var number = 1310; 
var number = 120; 
var number = 10; 
var number = 7; 

sau đó

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

Tất nhiên bạn vẫn cần phải xác thực đầu vào. Bởi vì đây chỉ hoạt động đáng tin cậy trong các điều kiện sau đây:

  • Số zero trong zeroString là desired_length + 1
  • Số chữ số trong số khởi đầu của bạn là ít hơn hoặc bằng chiều dài mong muốn của bạn

Backstory:

Tôi có trường hợp cần số có độ dài cố định (14 chữ số). Tôi muốn xem cơ bản tôi có thể làm được điều này như thế nào.Nó chạy hàng chục nghìn lần trên một trang tải, do đó, vấn đề hiệu quả. Nó không hoàn toàn có thể sử dụng lại được, và nó có chút không thích hợp. Ngoại trừ việc nó rất đơn giản.

Đối với chuỗi có chữ số n mong muốn, phương thức này yêu cầu một chuỗi (ít nhất) n + 1 số không. Chỉ số 0 là ký tự đầu tiên trong chuỗi, sẽ không bao giờ được sử dụng, vì vậy thực sự, nó có thể là bất cứ điều gì.

Cũng lưu ý rằng string.substring() khác với string.substr()!

var bareNum = 42 + ''; 
var zeroString = "000000000000000"; 
var paddedNum = zeroString.substring(bareNumber.length, 14) + bareNum 

này kéo zero từ zeroString bắt đầu ở vị trí phù hợp với độ dài của chuỗi, và tiếp tục để có được zero với độ dài cần thiết của 14. Chừng nào mà "14" trong dòng thứ ba là một số nguyên thấp so với số ký tự trong zeroString, nó sẽ hoạt động.

-1

Sử dụng chức năng String.JS librairy padLeft:

S('123').padLeft(5, '0').s --> 0
Các vấn đề liên quan