我正在使用Intl.numberFormat,无法检查用户输入的数字是否符合该地区的正确格式,如逗号分隔,点分隔和空格分隔的一些国家。
ttvkxqim1#
您可以使用window.navigator.language计算出用户的“首选”语言,然后计算出该语言的小数点和千位分隔符,本例有一个正则表达式,如果找到了千位分隔符和小数点分隔符,则接受它们,同时保持它们可选。
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,并接受其中任何一种格式,因为兼容的代码会带来更好的用户体验。
en-US
isValidNumber
1条答案
按热度按时间ttvkxqim1#
您可以使用
window.navigator.language
计算出用户的“首选”语言,然后计算出该语言的小数点和千位分隔符,本例有一个正则表达式,如果找到了千位分隔符和小数点分隔符,则接受它们,同时保持它们可选。但是,您也可以参数化语言环境-然后使用
window.navigator.language
和一个更标准的默认值(例如en-US
)调用isValidNumber
,并接受其中任何一种格式,因为兼容的代码会带来更好的用户体验。