如何验证用户的货币输入

时间:2018-06-04 07:28:07

标签: reactjs validation localization internationalization react-intl

所以我目前正在开发一个支持多种语言的网站。我有一个输入框,用户可以在里面输入货币数量。我需要一个函数来验证输入是否合法。 但是,因为不同的国家使用不同的数字格式。 例如:英格兰使用'。'对于十进制和','为千分隔符。 德国使用','代表十进制和'。'千分隔符。 法语使用','表示十进制和(空格)表示千位分隔符... 而对于中国/日本,他们甚至不使用数字“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 个答案:

答案 0 :(得分:0)

您可以利用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