能否用Intl.DisplayNames()实现ISO-3到ISO-2国家代码转换?
可以用Intl.DisplayNames()实现ISO-3到ISO-2国家代码的规范转换
答案是肯定的,借助Intl.DisplayNames()结合ECMAScript的国际化标准API,完全可以实现ISO 3166-1 alpha-3到alpha-2的转换,这是符合官方规范的方案,能有效避免自定义映射表的错误或第三方工具弃用带来的问题。
实现方法
Intl.DisplayNames支持将合法的ISO-3国家代码作为输入,我们可以先通过它验证代码的有效性,再结合Intl.Locale提取对应的ISO-2代码:
function iso3ToIso2(iso3Code) { const regionNames = new Intl.DisplayNames('en', { type: 'region' }); try { // 验证ISO3代码合法性,无效代码会抛出RangeError regionNames.of(iso3Code); // 通过Locale对象获取ISO2代码 return new Intl.Locale(`en-${iso3Code}`).region; } catch (err) { // 返回null或自定义错误提示处理无效输入 return null; } } // 测试示例 console.log(iso3ToIso2('FRA')); // 输出 'FR' console.log(iso3ToIso2('GBR')); // 输出 'GB' console.log(iso3ToIso2('INVALID')); // 输出 null
关键说明
- 合法性验证:
regionNames.of(iso3Code)会对输入的ISO-3代码进行校验,若代码不合法(如不存在的代码)会抛出RangeError,这一步能过滤无效输入,避免转换错误。 - 兼容性:该方案基于ECMAScript国际化标准,所有现代浏览器(Chrome 81+、Firefox 75+、Safari 14+)和Node.js 14及以上版本都支持,不存在方法弃用风险。
- 无需自定义映射:完全依赖官方维护的区域代码数据,避免了手动维护映射表可能出现的遗漏或错误。
内容的提问来源于stack exchange,提问作者EltoCode
相关产品推荐
相关产品推荐

