正则表达式帮我打破电话号码?

时间:2012-11-22 06:52:27

标签: c# regex

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

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

示例:

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

(改变号码以保护无辜者。:))

我需要打破这些 国家代码 区号 数 扩展

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

11113616X123会 国家+61 AreaCode = NULL 数字= 11113616 延期= 123

规则是:

可能的区号:

  

02 03 04 07 08

这甚至可能吗?

07 1111 4832 NIKKI - 我将删除Alpha Numerics,除非它是2个数字之间的X.

3 个答案:

答案 0 :(得分:0)

你可以试试这个

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

here on Regexr。当您将鼠标悬停在蓝色突​​出显示的匹配项上时,您可以看到这些组的内容。

它将国家代码放在Group1中,区域代码放在组2中,组3中的数字和组4中的扩展名。除数字外,所有部分都是可选的。当找不到零件时,未设置组的值,则必须设置默认值。

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

答案 1 :(得分:0)

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

这是使用测试驱动开发方法的理想案例。首先列出所有可能的情况,为每个案例编写单元测试,并调整案例的消毒剂代码。

答案 2 :(得分:0)

有专门的图书馆来规范电话号码,它们非常专业。但他们也倾向于依赖正则表达式。 Lync Server(Microsoft的IP语音解决方案)有一​​个依赖于regex的规范化库。他们的页面包含了一些可以派上用场的样本:

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

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