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

devono essere lasciati in pace.Javascript aggiungendo zeri all'inizio di una stringa (lunghezza massima 4 caratteri)

var number = 120; 

deve essere modificato in "0120";

var number = 10; 

deve essere modificato in "0010";

var number = 7; 

deve essere modificato in "0007";

+2

Non si desidera eseguire il cast 1310 sulla stringa "1310", come se si lanciasse tutti gli altri casi alle stringhe? –

+1

Sono d'accordo con Šime Vidas - la mia risposta sotto farà proprio questo. –

+0

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

risposta

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

possono non operare in vecchie versioni di IE.

+2

+1, funzionerà bene da IE 4.0 in poi. Un approccio più semplice, se non hai bisogno che sia dinamico, è '(" 0000 "+ n) .slice (-4);' –

+0

@Andy sì se lo stavo codificando probabilmente inizializzerei solo una stringa di 20 o 30 zeri e usarlo. – Pointy

1

Un approccio che mi piace è aggiungere 10^N al numero, dove N è il numero di zeri che si desidera. Trattare il numero risultante come una stringa e tagliare la cifra zeroth. Naturalmente, si vorrà fare attenzione se il vostro numero di ingresso potrebbe essere più grande la lunghezza pad, ma è ancora molto più veloce rispetto al metodo ciclo:

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

ecc Si può fare questo in una funzione abbastanza facilmente :

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

utilizzati:

someString.pad(neededChars, neededLength) 

Esempio:

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

Ecco un altro modo. Viene da qualcosa che ho fatto che deve essere fatto migliaia di volte su un caricamento della pagina. È abbastanza efficiente dalla CPU per codificare una stringa di zeri una volta sola, e tritare quante volte è necessario per il pad tutte le volte che è necessario. Mi piace molto il potere del metodo 10: è piuttosto flessibile.

In ogni caso, questo è efficiente come ho potuto venire con:

Per la domanda iniziale, scegliere uno dei casi ...

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

poi

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

Ovviamente è ancora necessario convalidare l'input. Perché questo funziona solo in modo affidabile alle seguenti condizioni:

  • numero di zeri nel zeroString è desired_length + 1
  • Numero di cifre nel numero di partenza è minore o uguale alla lunghezza desiderata

Backstory:

Ho un caso che richiede un numero zero di lunghezza fissa (14 cifre). Volevo vedere quanto basico potevo fare questo.Viene eseguito decine di migliaia di volte su una pagina caricata, quindi l'efficienza è importante. Non è completamente riutilizzabile così com'è, ed è un po 'poco elegante. Tranne che è molto molto semplice.

Per la stringa con n cifre desiderata, questo metodo richiede una stringa di (almeno) n + 1 zeri. L'indice 0 è il primo carattere nella stringa, che non sarà mai usato, quindi in realtà potrebbe essere qualsiasi cosa.

Si noti inoltre che string.substring() è diverso da String.substr()!

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

Questo tira zeri da zeroString partire dalla posizione corrispondente alla lunghezza della stringa, e continua ad ottenere zeri alla lunghezza necessaria di 14. Fintanto che "14" nella terza riga è un numero intero inferiore del numero di caratteri in zeroString, funzionerà.

-1

Usa String.JS funzione librairy PadLeft:

S('123').padLeft(5, '0').s --> 0
Problemi correlati