在JavaScript中通过给定的电话号码检测国家代码

5

我有一个包含所有可用国家代码的对象。我想知道如何通过给定的电话号码获取国家代码并显示相应的国家名称。电话号码看起来像16041234567(加拿大/美国+1)或8601012345678(中国+86)或任何其他没有加号(+)的国家电话号码。我只想获取国家代码,然后我就知道如何显示名称了。代码似乎可以是1到4位数字。


1
我建议您尝试一下,然后告诉我们您尝试了什么以及出了什么问题。 这个SO问题可能会有所帮助。 - showdev
尝试过了,但是无法弄清楚。这就是我在这里提问的原因。 - eded
很遗憾听到这个消息。你尝试了什么?不幸的是,“要求提供代码的问题必须展示对问题的最基本理解。包括尝试过的解决方案为什么它们没有起作用以及预期结果。”试一试吧,你不会失去什么。 - showdev
1个回答

4

第一回答:

只是一个快速的想法,为什么不从另一端开始数。

从号码的末尾减去最后10个数字。你剩下的就是缩短的国家代码。 以你的例子为例:

num = "16041234567"; code = num.slice(0, num.length-10); country_name = country_code_object[code];

这段代码假设你的对象可以处理可变长度的代码(但你可以随时缓冲代码前面的部分)。

修正:中国不使用10个数字(手机使用11个数字)

修复: 经过对国际区号的更全面了解,我意识到它们是一个前缀树。这意味着你只需要一遍遍地逐个字符地检查,就可以在线性时间内完成。

num = "16041234567";
country_code;
i = 1;
while (!country_code || i < num.length) {
    country_code = country_code_obj[num.slice(0, i)];
    i++;
}

国家代码的本质保证了第一个有效的代码就是正确的。(我们可以想象这一点是真实的,电话公司不知道你何时输入完毕。他们只知道你已经输入完整个有效的国家代码)


1
电话号码不一定是10位数字。请查看中国的电话号码。 - eded
我改正了,谢谢 eded。我只在欧洲、北美和南美旅行过。所以我猜我的答案在这种情况下不适用。 - Nathan
感谢 eded 的回答,问题已解决。 - Nathan
|| 语句应更改为 &&。否则,如果 country_code_obj 不包含国家代码或号码中没有国家代码,则循环将永远运行。 - leon karabchesvky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接