आमतौर पर आपको इनपुट फ़ील्ड का उपयोग करने पर विचार करना चाहिए जो संख्यात्मक मानों के लिए मुफ्त टेक्स्ट इनपुट की अनुमति नहीं देता है। लेकिन ऐसे मामले हो सकते हैं, जब आपको इनपुट प्रारूप का अनुमान लगाने की आवश्यकता होती है। उदाहरण के लिए जर्मनी में 1.234,56 का मतलब अमेरिका में 1,234.56 है। उन देशों की सूची के लिए https://salesforce.stackexchange.com/a/21404 देखें, जो दशमलव के रूप में अल्पविराम का उपयोग करते हैं।
मैं सभी गैर-संख्यात्मक वर्णों का सर्वोत्तम अनुमान और पट्टी करने के लिए निम्नलिखित फ़ंक्शन का उपयोग करता हूं:
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);
}
इसे यहाँ आज़माएँ: https://plnkr.co/edit/9p5Y6H?p=preview
उदाहरण:
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
फ़ंक्शन में एक कमजोर बिंदु है: यदि आपके पास 1,123 या 1.123 है तो प्रारूप का अनुमान लगाना संभव नहीं है - क्योंकि स्थानीय प्रारूप के आधार पर दोनों अल्पविराम या हजारों-विभाजक हो सकते हैं। इस विशेष मामले में फ़ंक्शन विभाजक को हजारों-विभाजक के रूप में मानेंगे और 1123 लौटाएंगे।