0

我的任务是不可能的,也许吧?

我有一张电话号码表。但是它们是手动输入的,而且很脏。

例子:

0711112399
07 1111 3288
07 1111 4832 NIKKI
0711117929
0711113616X123
0
NULL
1300 111 782

.

(数字改变以保护无辜者。:))

我需要将这些分解为 CountryCode AreaCode Number Extension

所以,0711112399会变成 CountryCode = +61 (因为这个号码上没有代码) AreaCode = 07 Number = 11112399 Extension = NULL

11113616X123将是 Country +61 AreaCode = NULL Number = 11113616 Extension = 123

规则是:

可能的区号:

02 03 04 07 08

这甚至可能吗?

对于 07 1111 4832 NIKKI - 我将删除字母数字,除非它是 2 个数字之间的 X。

4

3 回答 3

0

你可以试试这个

^(00\d{2}|\+\d{2})?(0\d)?([\d ]+)(?:[xX](\d+))?

在 Regexr 上查看。将鼠标悬停在突出显示的蓝色匹配项上时,您可以查看组的内容。

它将国家代码放在Group1中,地区代码放在Group 2中,号码放在Group 3中,分机放在Group 4中。除号码外,所有部分都是可选的。当没有找到某个部分时,没有设置组的值,那么您必须输入默认值。

我发现国家代码有问题。它在这里用 2 位数字进行硬编码,但我知道也有一些国家有 3 位数字代码。对于具有 1 位代码的国家/地区,我不确定是否可能有一个前导 0。但我需要知道区号/号码何时开始。

于 2012-11-22T07:12:06.540 回答
0

我不会说不可能,但这需要严格的测试。但我不一定会专注于正则表达式。使用其他技术实现可能更简单。

这是进行测试驱动开发的理想案例。首先列出所有可能的案例,为每个案例编写一个单元测试,并为案例调整清理代码。

于 2012-11-22T07:14:06.273 回答
0

有专门的库来规范电话号码,它们非常专业。但他们也倾向于依赖正则表达式。Lync Server(Microsoft 的 IP 语音解决方案)有一​​个依赖于正则表达式的规范化库。他们的页面包含相当多的示例,它们会派上用场:

http://technet.microsoft.com/en-us/library/gg413082.aspx

最后,构建多个将规范化为通用格式的表达式可能比尝试创建一个表达式来规范化所有内容更容易。

于 2012-11-22T11:47:51.647 回答