¿Agregar ceros adicionales delante de un número usando jQuery?

81

Tengo un archivo que se cargó y que está formateado así

MR 1

MR 2

MR 100

MR 200

Señor 300

ETC.

Lo que tengo que hacer es agregar dos 00 adicionales antes de cualquier cosa antes de MR 10 y agregar un 0 adicional antes de MR10-99

Entonces los archivos están formateados

Señor 001

Señor 010

Señor 076

ETC.

¡Cualquier ayuda sería genial!

Diseños Web Chill
fuente
3
jQuery no lo ayudará aquí (al menos no para las cosas de formato) ... pero ¿cómo accede al archivo? ¿Cómo se obtiene su contenido? De alguna manera, el contexto no está claro. Proporcione al menos algún código para que podamos comprender mejor el problema.
Felix Kling
@FelixKling Los archivos no son relevantes. Pregunta sobre el formato.
felwithe

Respuestas:

214

Suponiendo que tiene esos valores almacenados en algunas cadenas, intente esto:

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"
Todd Yandell
fuente
3
Sé que esto es antiguo, pero esta función me ayudó y pensé en agregarle algo. Esto realizará la conversión de tipo para variables enteras o flotantes, lo que significa que puede hacerlo pad(85, 5)tan bien como pad("85", 5). return (str).toString().length < max ? pad("0" + (str).toString(), max) : (str).toString();
Rémi Breton
7
@ RémiBreton Su función se utiliza demasiadas veces .toString(). Creo que sería mejorfunction 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 (longitud, leadChar) {if (leadChar === undefined) leadChar = "0"; devolver this.length <length? (leadChar + this) .padLeft (longitud, leadChar): esto; };
Tim Valentine
34

Tengo una solución potencial que supongo que es relevante, la publiqué aquí:

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

Básicamente, quieres una longitud mínima de 2 o 3, puedes ajustar cuántos ceros pones en este código.

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

Sabía que siempre obtendría un único entero como mínimo (porque hora 1, hora 2), etc., pero si no puede estar seguro de obtener nada más que una cadena vacía, puede simplemente hacer "000" + d.getHours ( ) para asegurarse de obtener el mínimo.

entonces quieres 3 números? solo use -3 en lugar de -2 en mi código, solo estoy escribiendo esto porque quería construir un reloj de 24 horas de una manera súper fácil.

Christopher Thomas
fuente
21

Nota: consulte la Actualización 2 si está utilizando la última versión de ECMAScript ...


Aquí una solución que me gustó por su simplicidad de una respuesta a una pregunta similar :

var n = 123

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

ACTUALIZAR

Como sugirió @RWC, por supuesto, puede envolver esto muy bien en una función genérica como esta:

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

leftPad(123, 5); // returns 00123

Y para aquellos a los que no les gusta la rebanada:

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

Pero si el rendimiento importa, recomiendo leer la respuesta vinculada antes de elegir una de las soluciones sugeridas.

ACTUALIZACIÓN 2

En ES6, la clase String ahora viene con un padStartmétodo incorporado que agrega caracteres iniciales a una cadena. Consulte MDN aquí para obtener referencias String.prototype.padStart(). Y también hay un padEndmétodo para terminar personajes.

Entonces, con ES6 se volvió tan simple como:

var n = 123;
n.padStart(5, '0'); // returns 00123
Marchitar
fuente
3
Versión mejorada: 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"
MadBender
fuente
En otras palabras: conviértalo en una cadena, luego rellene con ceros .
Pabellón
4

Esta es la función que generalmente uso en mi código para anteponer ceros a un número o cadena.

Las entradas son la cadena o número (str) y la longitud deseada de la salida (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;
}

};

Ejemplos:

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
Davan Etelamaki
fuente
2

Si divide en el espacio, puede agregar ceros a la izquierda usando una función simple como:

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

Entonces puede probar la longitud de la cadena y si es menor que 6, divida el espacio, agregue ceros al número y luego vuelva a unirlo.

O como expresión regular:

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

Estoy seguro de que alguien puede hacerlo con un reemplazo, no con dos.

Editar - ejemplos

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

Pondrá uno o dos ceros delante de un número al final de una cadena con un espacio delante. No importa qué parte antes del espacio esté.

RobG
fuente
¿Qué sucede si alguien dice que si un documento tiene MR 003, podemos ignorar la adición de 0, etc.?
Chill Web Designs
2

Solo para reírse, hágalo de la manera larga y desagradable ....:
(NOTA: ¡No he usado esto, y no recomendaría usar esto!)

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

Yo mismo necesitaba algo como esto el otro día, Pud en lugar de siempre un 0, quería poder decirle lo que quería acolchado en el frente. Esto es lo que se me ocurrió para el código:

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

Donde n es lo que desea rellenar, e es la potencia a la que desea rellenar (número de caracteres que debería tener) y d es con lo que quiere que se rellene. Parece funcionar bien para lo que lo necesitaba, pero fallaría si "d" tuviera más de un carácter en algunos casos.

Zapatero
fuente
1
var str = "43215"; 
console.log("Before : \n string :"+str+"\n Length :"+str.length);
var max = 9;
while(str.length < max ){
                                str = "0" + str;

                        }
console.log("After : \n string :"+str+"\n Length :"+str.length);

¡Funcionó para mí! Para aumentar los ceros, actualice la variable ' max '

URL de trabajo de Fiddle: ¿ Agregar ceros adicionales delante de un número usando jQuery? :

Karthikeyan Baskaran
fuente
1

str podría ser un número o una cadena.

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

Agregue más ceros si necesita dígitos grandes

Amal Kalutotage
fuente
0

En términos simples, podemos escribir lo siguiente:

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

// Porque la mayoría de las veces lo necesitamos por cuestiones de día, mes o cantidad.

Ramasamy Kasi
fuente
0

Sepa que esta es una publicación antigua, pero aquí hay otra forma corta y efectiva: ceros

editar: dur. si num no es una cadena, agregaría:

len -= String(num).length;

si no, está todo bien

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

Agregando 100 al número, luego ejecute una función de subcadena desde el índice 1 hasta la última posición a la derecha.

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

obtendrá este resultado a partir de la fecha de 2020-11-3

11,03

Espero que la respuesta sea de utilidad

Hamid Jolany
fuente
-1

Intente seguir, que convertirá los números de uno y dos dígitos en números de 3 dígitos con un prefijo de ceros.

var base_number = 2;
var zero_prefixed_string = ("000" + base_number).slice(-3);
vivek shirodkar
fuente
Si bien este código puede proporcionar una solución a la pregunta, es mejor agregar contexto sobre por qué / cómo funciona. Esto puede ayudar a los futuros usuarios a aprender y aplicar ese conocimiento a su propio código. También es probable que tenga comentarios positivos de los usuarios en forma de votos a favor, cuando se explique el código.
borchvm
Anotado y modificado en consecuencia.
vivek shirodkar