Normalerweise sollten Sie Eingabefelder verwenden, die keine Freitexteingabe für numerische Werte zulassen. Es kann jedoch Fälle geben, in denen Sie das Eingabeformat erraten müssen. Zum Beispiel bedeutet 1,234,56 in Deutschland 1.234,56 in den USA. Unter https://salesforce.stackexchange.com/a/21404 finden Sie eine Liste der Länder, die Komma als Dezimalzahl verwenden.
Ich benutze die folgende Funktion, um eine bestmögliche Vermutung anzustellen und alle nicht numerischen Zeichen zu entfernen:
function parseNumber(strg) {
var strg = strg || "";
var decimal = '.';
strg = strg.replace(/[^0-9$.,]/g, '');
if(strg.indexOf(',') > strg.indexOf('.')) decimal = ',';
if((strg.match(new RegExp("\\" + decimal,"g")) || []).length > 1) decimal="";
if (decimal != "" && (strg.length - strg.indexOf(decimal) - 1 == 3) && strg.indexOf("0" + decimal)!==0) decimal = "";
strg = strg.replace(new RegExp("[^0-9$" + decimal + "]","g"), "");
strg = strg.replace(',', '.');
return parseFloat(strg);
}
Probieren Sie es hier aus: https://plnkr.co/edit/9p5Y6H?p=preview
Beispiele:
1.234,56 € => 1234.56
1,234.56USD => 1234.56
1,234,567€ => 1234567
1.234.567 => 1234567
1,234.567 => 1234.567
1.234 => 1234 // might be wrong - best guess
1,234 => 1234 // might be wrong - best guess
1.2345 => 1.2345
0,123 => 0.123
Die Funktion hat eine Schwachstelle: Es ist nicht möglich, das Format zu erraten, wenn Sie 1.123 oder 1.123 haben - da je nach Gebietsschema-Format beide ein Komma oder ein Tausendertrennzeichen sein können. In diesem speziellen Fall behandelt die Funktion das Trennzeichen als Tausendertrennzeichen und gibt 1123 zurück.