Biasanya Anda harus mempertimbangkan untuk menggunakan kolom input yang tidak mengizinkan input teks gratis untuk nilai numerik. Tetapi mungkin ada kasus, ketika Anda perlu menebak format input. Misalnya 1,234,56 di Jerman berarti 1,234,56 di AS. Lihat https://salesforce.stackexchange.com/a/21404 untuk daftar negara yang menggunakan koma sebagai desimal.
Saya menggunakan fungsi berikut untuk melakukan tebakan terbaik dan menghapus semua karakter non-numerik:
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);
}
Coba di sini: https://plnkr.co/edit/9p5Y6H?p=preview
Contoh:
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
Fungsi ini memiliki satu titik lemah: Tidak mungkin menebak format jika Anda memiliki 1.123 atau 1.123 - karena bergantung pada format lokal, keduanya mungkin berupa koma atau pemisah ribuan. Dalam kasus khusus ini, fungsi akan memperlakukan pemisah sebagai pemisah ribuan dan mengembalikan 1123.