我的任务是不可能的,也许?
我有一张电话号码表。但它们是手动输入的,非常脏。
示例:
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.
答案 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
最后,构建一些规范化为通用格式的表达式可能更容易,而不是尝试创建一个表达式来规范化所有内容。