zurück

Tausendertrennzeichen mit Fehlerprüfung
JavaScript (Reguläre Ausdrücke)

Funktionsweise

Das hier vorgestellte Script Prüft einen übergebenen Zahlenstring zunächst darauf, ob er einen Dezimalanteil enthält. Hierbei ist das am weitesten rechts gefundene Zeichen (Punkt oder Komma) entscheidend. Ersetzt wird es bei erfolgreicher Suche durch den Dezimalpunkt.

Anschliessend wird die Zahl in Ganz- und Dezimalanteil ausgehend von dem gefundenen Zeichen aufgesplittet. Der ganzzahlige Anteil wird anschliessend von eventuell enthaltenen Kommata und Punkten gereinigt.

Anschliessend wird noch geprüft, ob es sich um eine Zahl handelt. D.h. ob eventuell noch andere Zeichen als Ziffern und der Dezimalpunkt gefunden werden.

Zu guter letzt wird der String mit den notwendigen Tausendertrennzeichen versehen und bei Bedarf mit zwei Dezimalstellen versehen.

Durch die umstänglichere Prüfung zu Beginn der Routine ist es möglich, mit dem Wert aus dem Inputfeld direkt weiter zu arbeiten. Der User kann also eventuelle Fehler korrigieren, ohne eine Fehlermeldung wegen falscher Zeichen (Komma) zu erhalten.

Beispiel - Tausendertrennzeichen mit Fehlerprüfung

Eingabe:

Quellcode zum Beispiel

Der folgende Quellcode zeigt die oben vorgestellte Routine.

JavaScript:
function formatNumber(strZahl, intDezStellen){
  // Variablen vorbelegen
  strDelimiter = (typeof(strDelimiter)=="undefined") ? "." : strDelimiter;
  intDezStellen = (typeof(intDezStellen)=="undefined") ? 2 : intDezStellen;

  // Tausendertrennzeichen eventuell maskieren
  var strDelimiterMask = (strDelimiter.match(/(\.|\+|\*|\?|\^|\(|\)|\$)/))?"\\"+strDelimiter:strDelimiter;

  // Falls ein Komma oder Punkt am Ende existiert
  if(strZahl.match(/^(.*)(,|\.)(\d+)$/)){
    // Durch Punkt ersetzen
    strZahl = strZahl.replace(/^(.*)(,|\.)(\d+)$/, RegExp.$1+"."+RegExp.$3);
  }

  // Zahl in Dezimal- und Ganzzahlanteil splitten
  var strFirst = strZahl.substring(0, strZahl.length-RegExp.$3.length-1);
  var strSecond = strZahl.substring(strZahl.length-RegExp.$3.length-1, strZahl.length);

  // Suchmaske für Tausendertrennzeichen
  strPattern = eval("/(,|"+strDelimiterMask+")/");
  // Solange im Ganzzahlanteil Punkte oder Kommata gefunden werden
  while(strFirst.match(strPattern)){
    // Punkte entfernen
    strFirst = strFirst.replace(strPattern, "");
  }

  // Ganz- und Dezimalanteil wieder zusammenführen
  strZahl = strFirst + strSecond;

  // Falls keine gültige Zahl eingegeben wurde
  if(isNaN(Number(strZahl))){
    alert("Keine gültige Zahl eingegeben!\n- Keine Tausendertrennzeichen\n- Dezimalpunkt statt Komma)");
    return "";
  }

  // Mögliche Dezimalstellen auf 2 Stellen runden und Dez-Punkt durch Komma ersetzen
  strZahl = String(Number(strZahl).toFixed(intDezStellen)).replace(/\./,",");

  // Solange noch mindestens vier Ziffern am Anfang gefunden werden
  while(strZahl.match(/^(\d+)(\d{3}\b)/)){
    // Tausendertrennzeichen einfügen
    strZahl = strZahl.replace(/^(\d+)(\d{3}\b)/, RegExp.$1 + strDelimiter + RegExp.$2);
  }

  return(strZahl);
}

Der Funktion können zwei Parameter übergeben werden:

  1. strZahl - die Zahl, die formatiert werden soll, als String
  2. intDezStellen - Anzahl der Stellen nach dem Komma
© 2006 Quaese