首页 > 解决方案 > 如何验证用户输入的货币

问题描述

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

但是,有没有更明智的方法呢?我正在寻找的是类似已经构建的验证器/库或更简单的方法来解决这个问题,而不必为不同的语言编写不同的验证器

标签: reactjsvalidationlocalizationinternationalizationreact-intl

解决方案


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


推荐阅读