在現(xiàn)代瀏覽器中,您可以使用內(nèi)置的Intl.NumberFormat來檢測(cè)瀏覽器的數(shù)字格式并規(guī)范化輸入以匹配。
function parseNumber(value, locale = navigator.language) {
const example = Intl.NumberFormat(locale).format('1.1');
const cleanPattern = new RegExp(`[^-+0-9${ example.charAt( 1 ) }]`, 'g');
const cleaned = value.replace(cleanPattern, '');
const normalized = cleaned.replace(example.charAt(1), '.');
return parseFloat(normalized);}const corpus = {
'1.123': {
expected: 1.123,
locale: 'en-US'
},
'1,123': {
expected: 1123,
locale: 'en-US'
},
'2.123': {
expected: 2123,
locale: 'fr-FR'
},
'2,123': {
expected: 2.123,
locale: 'fr-FR'
},}for (const candidate in corpus) {
const {
locale,
expected } = corpus[candidate];
const parsed = parseNumber(candidate, locale);
console.log(`${ candidate } in ${ corpus[ candidate ].locale } == ${ expected }? ${ parsed === expected }`);} 它們顯然有一些優(yōu)化和緩存的空間,但這在所有語(yǔ)言中都可靠地運(yùn)行。