Как проверить пользовательский ввод валюты

Поэтому я в настоящее время разрабатываю веб-сайт, который поддерживает много языков. У меня есть поле ввода, где пользователь может ввести количество валюты внутри. Мне нужна функция для проверки, если этот вход является законным или нет. однако, потому что разные страны используют разные форматы чисел. например: Англия использует "." для десятичной дроби и ',' для разделителя тысяч. Где в Германии используют ',' для десятичной дроби и '.' за тысячу разделителей. Французский язык использует ',' для десятичного и (пробел) для разделителя тысяч... А для китайского / японского языка они даже не используют число "1-9" для описания числа

Я могу сделать очень большую функцию if-else для проверки базы на языке, который они используют. что-то вроде этого

number = userinput()
if "de":
return deValidator(number)
if "fr":
return frValidator(number)
if "en":
return enValidator(number)
if "zh":
return zhValidator(number)

Однако есть ли более разумный способ сделать это? я ищу что-то вроде уже созданного валидатора / библиотеки или более простой подход для решения этой проблемы без необходимости написания другого валидатора для другого языка

1 ответ

Вы можете использовать на toLocaleString() метод, помогающий построить валидатор; toLocaleString() Метод возвращает строку с чувствительным к языку представлением числа.

const number = 123456.789;

// German uses comma as decimal separator and period for thousands
console.log(number.toLocaleString('de-DE'));
// → 123.456,789

// Arabic in most Arabic speaking countries uses Eastern Arabic digits
console.log(number.toLocaleString('ar-EG'));
// → ١٢٣٤٥٦٫٧٨٩

// India uses thousands/lakh/crore separators
console.log(number.toLocaleString('en-IN'));
// → 1,23,456.789

// the nu extension key requests a numbering system, e.g. Chinese decimal
console.log(number.toLocaleString('zh-Hans-CN-u-nu-hanidec'));
// → 一二三,四五六.七八九

// when requesting a language that may not be supported, such as
// Balinese, include a fallback language, in this case Indonesian
console.log(number.toLocaleString(['ban', 'id']));
// → 123.456,789

С помощью этого метода вы также можете форматировать числа с информацией о валюте:

const number = 10000000;

number.toLocaleString('it-IT', {style: 'currency', currency: 'EUR'})
// → 10.000.000,00 €

number.toLocaleString('it-IT', {style: 'currency', currency: 'USD'})
// → 10.000.000,00 US$

number.toLocaleString('en-US', {style: 'currency', currency: 'EUR'})
// → €10,000,000.00

number.toLocaleString('en-US', {style: 'currency', currency: 'USD'})
// → $10,000,000.00

Больше подробностей: toLocaleString https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

Другие вопросы по тегам