Genellikle, sayısal değerler için serbest metin girişine izin vermeyen giriş alanlarını kullanmayı düşünmelisiniz. Ancak giriş formatını tahmin etmeniz gereken durumlar olabilir. Örneğin Almanya'da 1.234,56, ABD'de 1.234.56 anlamına gelir. Ondalık olarak virgül kullanan ülkelerin listesi için https://salesforce.stackexchange.com/a/21404 adresine bakın .
En iyi tahminde bulunmak ve sayısal olmayan tüm karakterleri çıkarmak için aşağıdaki işlevi kullanıyorum:
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);
}
Burada deneyin: https://plnkr.co/edit/9p5Y6H?p=preview
Örnekler:
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
İşlevin bir zayıf noktası vardır: 1,123 veya 1,123'e sahipseniz biçimi tahmin etmek mümkün değildir - çünkü yerel biçim biçimine bağlı olarak her ikisi de virgül veya binlik ayırıcı olabilir. Bu özel durumda, işlev ayırıcıyı binlik ayırıcı olarak ele alır ve 1123 döndürür.