Vous devriez généralement envisager d'utiliser des champs de saisie qui n'autorisent pas la saisie de texte libre pour les valeurs numériques. Mais il peut y avoir des cas où vous devez deviner le format d'entrée. Par exemple, 1,234,56 en Allemagne signifie 1 234,56 aux États-Unis. Voir https://salesforce.stackexchange.com/a/21404 pour une liste des pays qui utilisent la virgule comme décimal.
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.