Alexander Foken: Warnung: parseInt und führende Nullen

Eine kleine Hinterhältigkeit in JavaScript betrifft mindestens den aktuellen Netscape und den IE3 (andere Browser habe ich gerade nicht greifbar):

parseInt() arbeitet à la "C", d.h. wenn ein String mit einer Null (0) beginnt, wird dieser String als oktale Zahl (Zahlensystem basierent auf 8 statt 10) angesehen. Das wiederum führt dazu, daß nur "00" bis "07" korrekte Ergebnisse liefern, "08" und "09" dagegen 0, weil parseInt() beim ersten ungültigen Zeichen abbricht (8 und 9 sind im oktalen Zahlensystem nicht erlaubt). "010" liefert 8, "011" liefert 9, und so weiter. Ganz übel wird die Sache bei Strings wie "01091" - der Parser bricht bei der 9 ab (ungültiges Zeichen), interpretiert "010" als oktale Zahl und liefert deshalb 8 stat 1091. parseInt("1091") liefert natürlich 1091, weil keine führende Null vorhanden ist, also die Zahl dezimal zu interpretieren ist.

Abhilfe bei der Überprüfung von Benutzereingaben: führende Nullen z.B. mit string.replace beseitigen:

s=document.form[0].element[0].value;
s=s.replace (/^0+/,"");
n=parseInt(s)
...

Übrigens funktioniert die Hex-Schreibweise auch:
parseInt("0xAFFE") ist nicht etwa 0 oder NaN, sondern 45054.
Ob X und die Hex-Ziffern A bis F groß oder klein geschrieben werden, ist egal.

Seid gewarnt, mir hat dieses "Feature" einiges an Kopfzerbrechen bereitet, als ich ein Datum im Format TT.MM.JJJJ überprüfen wollte, und die Prüffunktion alle Daten im August und September zurückgewiesen hat.

  1. Hi Alexander,

    Seid gewarnt, mir hat dieses "Feature" einiges an Kopfzerbrechen bereitet, als ich ein Datum im Format TT.MM.JJJJ überprüfen wollte, und die Prüffunktion alle Daten im August und September zurückgewiesen hat.

    da bist du nicht alleine, da hat auch Stefan schon geflucht. Was so alles im Archiv steht ;-)

    Gruss,
    Martin

    1. Hi Alexander, Hi Martin,

      Seid gewarnt, mir hat dieses "Feature" einiges an Kopfzerbrechen bereitet, als ich ein Datum im Format TT.MM.JJJJ überprüfen wollte, und die Prüffunktion alle Daten im August und September zurückgewiesen hat.

      Tja, ein kleiner Blick ins Archiv wirkt manchmal Wunder. Uebrigens ist es auch "manchmal" hilfreich in der Netscape-Doku nachzuschlagen und nicht denselben Fehler zu machen, den jeder macht. (Ich weiss, dass das aber sehr beliebt ist, aber nur bis zu dem Jahr 00 ;-) )

      da bist du nicht alleine, da hat auch Stefan schon geflucht. Was so alles im Archiv steht ;-)

      Und nicht nur Stefan, sondern auch andere.
      Der Vollstaendigkeit halber haettest Du aber auch die zentralen Links zu dem Thema praesentieren koennen. Das hol ich mal schnell nach:
      Ausgangsthread: <../../sfarchiv/1999_2/t03219.htm>
      <stink>
      Problemloesung;<../../sfarchiv/1999_2/t03219.htm#a15365>
      </stink>

      Michael N.

      1. Hi Michael,

        Der Vollstaendigkeit halber haettest Du aber auch die zentralen Links zu dem Thema praesentieren koennen.

        nicht, wenn man dauernd den Browser wegklicken muss weil der Projektleiter ständig ins Büro kommt ;-)

        Gruss,
        Martin