Eliminar / truncar los ceros iniciales mediante javascript / jquery


81

Sugerir una solución para eliminar o truncar los ceros iniciales del número (cualquier cadena) mediante javascript, jquery.


4
qué debería suceder cuando la cadena es "000000000"
robert

¿Se espera que el número sea siempre un número entero, o debería manejar números con decimales (por ejemplo '00000.5')?
Christian C. Salvadó

debería dar trabajo para cualquier cadena dada. es decir, "00000evsdd" debería dar "evsdd", "00000.5" debería dar ".5"
Somnath Muluk

Respuestas:


192

Puede utilizar una expresión regular que coincida con ceros al principio de la cadena:

s = s.replace(/^0+/, '');

12
@SomnathMuluk: ¡será una sorpresa para muchos programadores de JavaScript!
Bert

@Guffa: Lo estoy usando en el código jquery ... puede ser que no funcione.
Somnath Muluk

2
@Somnath, jQuery es javascript. Si algo funciona en javascript, seguirá funcionando si también está usando jQuery.
Abe Miessler

5
¿Por qué el voto negativo? Si no explica lo que cree que está mal, no podrá mejorar la respuesta.
Guffa

2
s = s.replace (/ ^ 0 + /, '') convertirá "00" en "" (cadena vacía en lugar de cadena con un cero), lo que en la mayoría de los casos no es deseable, mejor encapsularlo en una función y agregue la línea: if (s == "") s = "0";
Oliver Konig

30

Usaría la función Number ():

var str = "00001";
str = Number(str).toString();
>> "1"

O multiplicaría mi cuerda por 1

var str = "00000000002346301625363";
str = (str * 1).toString();
>> "2346301625363"

2
no funcionará con un valor superior a 2 ^ 53. Número ("009007199254740993"). ToString () será "9007199254740992"
madreason

13

Quizás un poco tarde, pero quiero agregar mis 2 centavos.

si su cadena SIEMPRE representa un número, con posibles ceros a la izquierda, puede simplemente convertir la cadena en un número usando el operador '+'.

p.ej

x= "00005";
alert(typeof x); //"string"
alert(x);// "00005"

x = +x ; //or x= +"00005"; //do NOT confuse with x+=x, which will only concatenate the value
alert(typeof x); //number , voila!
alert(x); // 5 (as number)

si su cadena no representa un número y solo necesita eliminar los 0, use las otras soluciones, pero si solo las necesita como número, esta es la forma más corta.

y para su información, puede hacer lo contrario, obligar a los números a actuar como cadenas si concatena una cadena vacía con ellos, como:

x = 5;
alert(typeof x); //number
x = x+"";
alert(typeof x); //string

espero que ayude a alguien


no funcionará con un valor superior a 2 ^ 53. (+ "009007199254740993"). ToString () será "9007199254740992"
madreason

13

Como dijiste "cualquier cadena", supongo que esta es una cadena que también quieres manejar.

"00012  34 0000432    0035"

Entonces, regex es el camino a seguir:

var trimmed = s.replace(/\b0+/g, "");

Y esto evitará la pérdida de un valor "000000".

var trimmed = s.replace(/\b(0(?!\b))+/g, "")

Puedes ver un ejemplo de trabajo aquí.


3

Obtuve esta solución para truncar ceros a la izquierda (número o cualquier cadena) en javascript:

<script language="JavaScript" type="text/javascript">
<!--
function trimNumber(s) {
  while (s.substr(0,1) == '0' && s.length>1) { s = s.substr(1,9999); }
  return s;
}

var s1 = '00123';
var s2 = '000assa';
var s3 = 'assa34300';
var s4 = 'ssa';
var s5 = '121212000';

alert(s1 + '=' + trimNumber(s1));
alert(s2 + '=' + trimNumber(s2));
alert(s3 + '=' + trimNumber(s3));
alert(s4 + '=' + trimNumber(s4));
alert(s5 + '=' + trimNumber(s5));
// end hiding contents -->
</script>

4
Ese no es un código muy bueno. La verificación de la longitud de la cadena es totalmente superflua, nunca se evaluará false. No es necesario el uso de 9999como segundo parámetro de substr. Solo usa while (s.substr(0,1) == '0') s = s.substr(1);. Además, ese fragmento de código parece muy antiguo, el languageatributo de la scriptetiqueta ha sido obsoleto durante mucho tiempo y el uso de comentarios dentro de las scriptetiquetas solo es necesario para los navegadores que no entienden la scriptetiqueta en absoluto, por ejemplo, Internet Explorer 1.0.
Guffa


2

Prueba esto,

   function ltrim(str, chars) {
        chars = chars || "\\s";
        return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
    }

    var str =ltrim("01545878","0");

Más aquí


tiene un problema para el valor de cadena dado
Somnath Muluk

@SomnathMuluk: qué problema. aquí está el ejemplo de trabajo jsfiddle.net/AxeUU
Gowri

2

Simplemente intente multiplicar por uno de la siguiente manera:

"00123" * 1; // Obtener como número
"00123" * 1 + ""; // Obtener como cadena



1

Si el número es int use

"" + parseInt(str)

Si el número es flotante, use

"" + parseFloat(str)

0

De otra forma sin expresiones regulares:

function trimLeadingZerosSubstr(str) {
    var xLastChr = str.length - 1, xChrIdx = 0;
    while (str[xChrIdx] === "0" && xChrIdx < xLastChr) {
        xChrIdx++;
    }
    return xChrIdx > 0 ? str.substr(xChrIdx) : str;
}

Con una cadena corta será más rápido que regex ( jsperf )


0
const input = '0093';
const match = input.match(/^(0+)(\d+)$/);
const result = match && match[2] || input;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.