所以我目前正在开发一个支持多种语言的网站。我有一个输入框,用户可以在里面输入货币数量。我需要一个函数来验证输入是否合法。 但是,因为不同的国家使用不同的数字格式。 例如:英格兰使用'。'对于十进制和','为千分隔符。 德国使用','代表十进制和'。'千分隔符。 法语使用','表示十进制和(空格)表示千位分隔符... 而对于中国/日本,他们甚至不使用数字“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)
然而,有没有更明智的方法呢?我正在寻找的是类似于已经构建的验证器/库或更简单的方法来解决这个问题,而无需为不同的语言编写不同的验证器
答案 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