在javascript中使用Intl.numberFormat时,如何验证数字的格式是否与语言环境相符?

2vuwiymt  于 2023-02-15  发布在  Java
关注(0)|答案(1)|浏览(117)
    • bounty将在6天后过期**。回答此问题可获得+50声望奖励。SparkFountain希望引起更多人对此问题的关注:请提供一个通用的解决方案,如果可能的话,甚至不必手工编写正则表达式,而是使用标准驱动的实现。

我正在使用Intl.numberFormat,无法检查用户输入的数字是否符合该地区的正确格式,如逗号分隔,点分隔和空格分隔的一些国家。

ttvkxqim

ttvkxqim1#

您可以使用window.navigator.language计算出用户的“首选”语言,然后计算出该语言的小数点和千位分隔符,本例有一个正则表达式,如果找到了千位分隔符和小数点分隔符,则接受它们,同时保持它们可选。

function isValidNumber(value) {
  const locale = window.navigator.language;
  const numberFormat = new Intl.NumberFormat(locale);
  const decimalSeparator = numberFormat.format(0.1).substr(1,1);
  const thousandSeparator = numberFormat.format(1000).substr(1,1);
  const regex = new RegExp(`^\\d{1,3}(\\${thousandSeparator}\\d{3})*(\\${decimalSeparator}\\d+)?|^\\d+(\\${decimalSeparator}\\d+)?$`);
  return regex.test(value);
}

但是,您也可以参数化语言环境-然后使用window.navigator.language和一个更标准的默认值(例如en-US)调用isValidNumber,并接受其中任何一种格式,因为兼容的代码会带来更好的用户体验。

相关问题