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.

Somnath Muluk
fuente
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+/, '');
Guffa
fuente
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"
Jade Hamel
fuente
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

DiegoDD
fuente
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í.

John Fisher
fuente
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>
Somnath Muluk
fuente
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
3
parseInt(value) or parseFloat(value)

Esto funcionará muy bien.

Krupall
fuente
Aunque no para decimales
sburke0708
@ sburke0708 - ¿Sí, lo hará? Eso es lo que hace parseFloat.
Sinister Beard
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í

Gowri
fuente
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

Siyavash Hamdi
fuente
1

Si el número es int use

"" + parseInt(str)

Si el número es flotante, use

"" + parseFloat(str)
loki_dev
fuente
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 )

razón loca
fuente
0
const input = '0093';
const match = input.match(/^(0+)(\d+)$/);
const result = match && match[2] || input;
Huesudo
fuente