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

debe dejarse solo.Javascript al agregar ceros al principio de una cadena (longitud máxima de 4 caracteres)

var number = 120; 

debe cambiarse a "0120";

var number = 10; 

debe cambiarse a "0010";

var number = 7; 

debe cambiarse a "0007";

+2

¿No desea lanzar 1310 a la cadena "1310", como si hubiera lanzado todas las otras cajas a las cadenas? –

+1

Estoy de acuerdo con Šime Vidas: mi respuesta a continuación lo hará. –

+0

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

Respuesta

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

podrían no funcionar en versiones antiguas de IE.

+2

+1, funcionará bien desde IE 4.0 en adelante. Un enfoque más simple, si no lo necesita para ser dinámico, es '(" 0000 "+ n) .slice (-4);' –

+0

@Andy sí, si estuviera codificando, probablemente solo iniciaría una cadena de 20 o 30 ceros y úsala. – Pointy

1

Un enfoque que me gusta es agregar 10^N al número, donde N es el número de ceros que desea. Trate el número resultante como una cadena y corte el dígito zeroth. Por supuesto, tendrá que tener cuidado si su número de entrada podría ser mayor que la longitud de la almohadilla, pero todavía es mucho más rápido que el método de bucle:

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

etc Usted puede hacer esto en una función con bastante facilidad :

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

Uso:

someString.pad(neededChars, neededLength) 

Ejemplo:

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

Aquí hay otra manera. Viene de algo que hice que debe hacerse miles de veces en una carga de página. Es bastante eficiente con la CPU codificar una cadena de ceros una vez, y cortar tantas veces como sea necesario para el teclado tantas veces como sea necesario. Realmente me gusta el método Power of 10, eso es bastante flexible.

De todos modos, esto es tan eficiente como podría llegar a:

Para la pregunta original, elegir uno de los casos ...

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

continuación

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

Por supuesto, todavía necesita validar la entrada. Porque esto sólo funciona de forma fiable bajo las siguientes condiciones:

  • número de ceros en la zeroString es desired_length + 1
  • Número de dígitos de su número de partida es menor o igual a la longitud deseada

Antecedentes:

Tengo un estuche que necesita un número de longitud fija (14 dígitos) sin relleno. Quería ver qué tan básico podía hacer esto.Se ejecuta decenas de miles de veces en una carga de página, por lo que la eficiencia es importante. No es del todo reutilizable tal como está, y es un poco poco elegante. Excepto que es muy muy simple.

Para cadena deseada de n dígitos, este método requiere una cadena de (al menos) n + 1 ceros. El índice 0 es el primer personaje de la cadena, que nunca se usará, así que realmente podría ser cualquier cosa.

Nótese también que String.substring() es diferente de String.substr()!

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

Esto tira de ceros de zeroString a partir de la posición de búsqueda de la longitud de la cadena, y continúa para obtener ceros a la longitud necesaria de 14. Mientras que "14" en la tercera línea es un número entero menor que el número de caracteres en zeroString, funcionará.

-1

Uso String.JS función librairy PadLeft:

S('123').padLeft(5, '0').s --> 0
Cuestiones relacionadas