0

我们知道有不同长度的数字。在欧洲,我们主要有 9 位数字加上国家代码。

在北美,我们经常会找到 10 位数字。

我试图弄清楚如何从可能具有不同长度的数字中获取国家代码。

有任何想法吗?也许您知道一些可以做到的工作库?

4

3 回答 3

1

国家代码从左到右解析,具有类似于霍夫曼编码思想的确定性端点。即,如果您首先看到 1,请停下来,这是美国/加拿大/相关领土。如果您看到除 7(俄罗斯/哈萨克斯坦)以外的大多数其他数字,请继续。其中一些数字可能会终止于第二个值。

国家代码列表在这里: http: //www.howtocallabroad.com/codes.html

你应该很容易接受这个并编写你自己的电话号码字符串解析器以确定哪个国家代码存在。

(不要忘记,如果这些是来自特定国家/地区的数字,您还必须考虑该国家/地区的退出代码,这也在我链接的页面上)

编辑:哦,我猜路易斯涵盖了它。但雅各布对巴巴多斯的评论是不正确的。巴巴多斯与美国的国家代码相同;246 是其在美国/加拿大国家代码中的本地“区号”。

于 2013-07-08T13:48:01.870 回答
1

我假设您正在谈论电话号码国家/地区代码。国家代码由国际电联定义 ( https://en.wikipedia.org/wiki/List_of_country_calling_codes )。国家代码可以是 1、2 或 3 位数字。您唯一的选择是列出所有国家/地区代码并从那里解析它。注意没有重叠;例如,+44 属于英国,没有一个国家只以 4 开头。

更新:北美地区有 4 位前缀,而不是 1,由 +1 和 3 位 NPA 组成(http://en.wikipedia.org/wiki/North_American_Numbering_Plan)。但同样的规则也适用,因为 +1-NPA 不能重复。巴巴多斯似乎是+1246,但没有其他国家或地区可以以+1246开头。您可以从http://en.wikipedia.org/wiki/List_of_North_American_Numbering_Plan_area_codes获取所有 NPA 的列表

于 2013-07-08T13:40:24.270 回答
1

关键事实:

  1. 国家代码总是在号码的开头,所以无论号码长短都很容易找到。

  2. 正如@Luis 指出的那样,没有重叠。

一个(看起来很漂亮)完整的国家代码列表在这里。如果您按长度(最短的优先)对它们进行排序并遍历列表,将第一个n数字与列表条目进行比较,您将得到答案。

但是,如果您查看墙上的列表,就会发现有各种代码组。一种更智能的方法会注意到:

  • 所有以 1 开头的数字都是美国、加拿大或其他与美国相关的地方,在这种情况下,接下来的三位数字会告诉您是哪一个。
  • 7是哈萨克斯坦
  • 除 20 外,所有以 2 开头的国家代码均为三位数。
  • 等等 ...
于 2013-07-08T13:44:09.067 回答