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

należy pozostawić bez zmian.Dodawanie zer na początku ciągu znaków (maksymalna długość 4 znaki)

var number = 120; 

należy zmienić na "0120";

var number = 10; 

należy zmienić na "0010";

var number = 7; 

należy zmienić na "0007";

+2

Nie chcesz rzutować 1310 na ciąg "1310", tak jak rzucasz wszystkie pozostałe przypadki na ciągi? –

+1

Zgadzam się z Šime Vidasem - moja odpowiedź poniżej zrobi właśnie to. –

+0

Zobacz: http://stackoverflow.com/questions/1267283/how-can-i-create-a-zerofilled-value-using-javascript – Thai

Odpowiedz

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

może nie działać w starszych wersjach IE.

+2

+1, będzie działało dobrze od IE 4.0 i później. Prostszym podejściem, jeśli nie potrzebujesz go do dynamicznego, jest '(" 0000 "+ n) .slice (-4);' –

+0

@Andy tak, gdybym to kodował, prawdopodobnie zainicjowałbym ciąg znaków 20 lub 30 zer i użyj go. – Pointy

1

Podejście, które mi się podoba to dodanie 10^N do liczby, gdzie N to liczba zer, które chcesz. Traktuj wynikową liczbę jako ciąg i odciąć zerową cyfrę. Oczywiście, będziemy chcieli, aby być ostrożnym, jeśli numer wejścia może być większa niż długość pad, ale to wciąż o wiele szybciej niż metoda pętli:

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

itd. Można to zrobić w funkcji dość łatwo :

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

Zastosowanie:

someString.pad(neededChars, neededLength) 

przykład:

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

Oto inny sposób. Pochodzi z tego, co zrobiłem, co trzeba zrobić tysiące razy przy ładowaniu strony. To dość wydajne dla procesora, aby jeden raz zakodować ciąg zer i posiekać tyle ile potrzeba na pad, tyle razy, ile potrzeba. Naprawdę lubię moc 10 metod - to dość elastyczne.

W każdym razie, to jest tak wydajny jak mogłem wymyślić:

dla oryginalnego pytanie wybrać jeden z przypadków ...

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

następnie

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

Oczywiście nadal musisz zweryfikować dane wejściowe. Bo to tylko działa niezawodnie pod następującymi warunkami:

  • ilość zer w zeroString jest desired_length + 1
  • Ilość cyfr numeru startowego jest mniejsza lub równa żądanej długości

Historia:

mam sprawę, że potrzebuje stałej długości (14-cyfrowy) numer zero-wyściełane. Chciałem zobaczyć, jak bardzo mogę to zrobić.Jest uruchamiany dziesiątki tysięcy razy przy ładowaniu strony, więc wydajność ma znaczenie. Nie nadaje się do ponownego użycia tak jak jest i jest trochę nieelegancka. Tyle, że jest bardzo prosty.

Dla pożądanej liczby cyfr wyściełanych ciągiem, ta metoda wymaga ciągu (co najmniej) n + 1 zera. Indeks 0 jest pierwszym znakiem w łańcuchu, który nigdy nie zostanie użyty, więc tak naprawdę może to być cokolwiek.

Należy również zauważyć, że string.substring() różni się od String.substr()!

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

Pociąga to zer z zeroString zaczynające się w pozycji odpowiadającej długości łańcucha, i kontynuuje się zera do wymaganej długości 14. Tak długo, jak to „14” w trzeciej linii jest mniejsza całkowita niż liczba znaków w zeroString, to zadziała.

-1

Zastosowanie String.JS funkcja librairy padLeft:

S('123').padLeft(5, '0').s --> 0
Powiązane problemy