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.

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

DiegoDD
quelle
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

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

Das wird gut funktionieren.

Krupall
quelle
Nicht für Dezimalstellen
sburke0708
@ sburke0708 - Ja wird es? Das macht der parseFloat.
Unheimlicher Bart
2

Versuche dies,

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

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

Mehr hier

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

Siyavash Hamdi
quelle
1

Wenn die Nummer int verwendet wird

"" + parseInt(str)

Wenn die Nummer float ist, verwenden Sie

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

Verrat
quelle
0
const input = '0093';
const match = input.match(/^(0+)(\d+)$/);
const result = match && match[2] || input;
Boney
quelle