Alexander Foken: Warnung: parseInt und führende Nullen

Beitrag lesen

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.