Entfernen / kürzen Sie führende Nullen mit Javascript / jquery


81

Schlagen Sie eine Lösung zum Entfernen oder Abschneiden führender Nullen von Zahlen (beliebiger Zeichenfolgen) durch Javascript oder jquery vor.


4
was passieren soll , wenn Zeichenfolge „000000000“
robert

Wird erwartet, dass die Zahl immer eine Ganzzahl ist, oder sollte sie Zahlen mit Dezimalstellen (z. B. '00000.5') verarbeiten?
Christian C. Salvadó

Es sollte Arbeit für jede gegebene Zeichenfolge geben. dh "00000evsdd" sollte "evsdd" geben, "00000.5" sollte ".5" geben
Somnath Muluk

Antworten:


192

Sie können einen regulären Ausdruck verwenden, der am Anfang der Zeichenfolge mit Nullen übereinstimmt:

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

12
@ SomnathMuluk: Das wird eine Überraschung für viele Javascript-Programmierer sein!
Bert

@ Guffa: Ich benutze es in JQuery-Code. Vielleicht funktioniert es deshalb nicht.
Somnath Muluk

2
@ Somnath, jQuery IS Javascript. Wenn etwas in Javascript funktioniert, funktioniert es weiterhin, wenn Sie zufällig auch jQuery verwenden.
Abe Miessler

5
Warum das Downvote? Wenn Sie nicht erklären, was Sie für falsch halten, kann dies die Antwort nicht verbessern.
Guffa

2
s = s.replace (/ ^ 0 + /, '') konvertiert "00" in in "" (leere Zeichenfolge anstelle einer Zeichenfolge mit einer Null in), was in den meisten Fällen unerwünscht ist, kapselt es besser in eine Funktion und füge die Zeile hinzu: if (s == "") s = "0";
Oliver Konig

30

Ich würde die Number () Funktion verwenden:

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

Oder ich würde meine Zeichenfolge mit 1 multiplizieren

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

2
es funktioniert nicht mit einem Wert größer als 2 ^ 53. Die Nummer ("009007199254740993"). ToString () lautet "9007199254740992"
madreason

13

Vielleicht etwas spät, aber ich möchte meine 2 Cent hinzufügen.

Wenn Ihre Zeichenfolge IMMER eine Zahl mit möglichen führenden Nullen darstellt, können Sie die Zeichenfolge einfach mit dem Operator '+' in eine Zahl umwandeln.

z.B

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)

Wenn Ihre Zeichenfolge keine Zahl darstellt und Sie nur die Nullen entfernen müssen, verwenden Sie die anderen Lösungen. Wenn Sie sie jedoch nur als Zahl benötigen, ist dies der kürzeste Weg.

und zu Ihrer Information können Sie das Gegenteil tun, indem Sie Zahlen zwingen, als Zeichenfolgen zu fungieren, wenn Sie ihnen eine leere Zeichenfolge verketten, wie z.

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

hoffe es hilft jemandem


es funktioniert nicht mit einem Wert größer als 2 ^ 53. (+ "009007199254740993"). ToString () wird "9007199254740992" sein
madreason

13

Da Sie "jede Zeichenfolge" gesagt haben, gehe ich davon aus, dass dies auch eine Zeichenfolge ist, mit der Sie umgehen möchten.

"00012  34 0000432    0035"

Regex ist also der richtige Weg:

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

Dies verhindert den Verlust eines "000000" -Werts.

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

Hier sehen Sie ein Arbeitsbeispiel


3

Ich habe diese Lösung zum Abschneiden führender Nullen (Zahlen oder beliebiger Zeichenfolgen) in Javascript erhalten:

<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
Das ist kein sehr guter Code. Die Überprüfung der Stringlänge ist völlig überflüssig und wird niemals ausgewertet false. Die Verwendung 9999als zweiter Parameter für substrist nicht erforderlich. Einfach benutzen while (s.substr(0,1) == '0') s = s.substr(1);. Außerdem sieht dieses Code-Snippet sehr alt aus, das languageAttribut des scriptTags ist seit langem veraltet und die Verwendung von Kommentaren in scriptTags ist nur für Browser erforderlich, die das scriptTag überhaupt nicht verstehen , z. B. Internet Explorer 1.0.
Guffa


2

Versuche dies,

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

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

Mehr hier


Es gibt ein Problem mit dem angegebenen Zeichenfolgenwert
Somnath Muluk,

@ SomnathMuluk: Welches Problem. Hier ist das Arbeitsbeispiel jsfiddle.net/AxeUU
Gowri

2

Versuchen Sie einfach, wie folgt mit eins zu multiplizieren:

00123 * 1; // Als Nummer erhalten
"00123" * 1 + ""; // Als Zeichenfolge abrufen



1

Wenn die Nummer int verwendet wird

"" + parseInt(str)

Wenn die Nummer float ist, verwenden Sie

"" + parseFloat(str)

0

Ein anderer Weg ohne Regex:

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

Mit einer kurzen Zeichenfolge ist es schneller als Regex ( jsperf )


0
const input = '0093';
const match = input.match(/^(0+)(\d+)$/);
const result = match && match[2] || input;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.