reactjs - 如何验证用户输入的货币
问题描述
所以我目前正在开发一个支持多种语言的网站。我有一个输入框,用户可以在其中输入里面的货币数量。我需要一个函数来验证该输入是否合法。但是,因为不同的国家使用不同的数字格式。例如:英格兰使用'.' 用于十进制,',' 用于千位分隔符。德国使用“,”表示十进制和“。” 为千位分隔符。法语使用 ',' 表示小数,(空格)表示千位分隔符......而对于 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)
但是,有没有更明智的方法呢?我正在寻找的是类似已经构建的验证器/库或更简单的方法来解决这个问题,而不必为不同的语言编写不同的验证器
解决方案
您可以利用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
推荐阅读
- regex - 正则表达式:从多个连接的 HTML 文件中获取内容
- ruby-on-rails - 如何在 before(:each) 钩子中访问 let'd 变量
- .net - rdlc 中的子报表仅显示 master 中的一条记录
- html - 使用 MS Excel VBA 从复杂的 HTML/JS 中提取数据
- r - 将绘图保存为图像或 pdf 时访问被拒绝?
- c# - 运行多个任务以更改链表 C#
- json - 如何根据属性值是否在数组中使用 jq 过滤 JSON?
- python - 将许多参数传递给 scipy 优化
- mongodb - 在不影响锁定和性能的情况下删除大型 mongo 集合的所有元素的最佳方法?
- tensorflow - 从对象检测 API 模型中提取研磨锚