En général, vous devriez envisager d'utiliser des champs de saisie qui ne permettent pas la saisie de texte libre pour les valeurs numériques. Mais il peut arriver que vous deviez deviner le format de saisie. Par exemple, 1.234,56 en Allemagne signifie 1.234.56 aux Etats-Unis. Voir https://salesforce.stackexchange.com/a/21404 pour une liste de pays qui utilisent la virgule comme décimale.
J'utilise la fonction suivante pour faire une meilleure estimation et supprimer tous les caractères non numériques :
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);
}
Essayez-le ici : https://plnkr.co/edit/9p5Y6H?p=preview
Exemples :
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
La fonction a un point faible : il n'est pas possible de deviner le format si vous avez 1,123 ou 1.123 - parce que selon le format local, les deux peuvent être une virgule ou un séparateur de milliers. Dans ce cas particulier, la fonction traitera le séparateur comme un séparateur de milliers et retournera 1123.