从电话号码获取区号

问题描述:

我让用户提交电话号码。对于如何输入没有限制。 我需要从这个电话号码是两件事;区号(不包括前导0)和其余的数字。两者都没有非数字字符。从电话号码获取区号

可能出现的情况,用户可能输入:

  • 0707-123456
  • 0707-12 34 56
  • 08-123 456 78
  • 08-123 45 67
  • 031-123 45 67
  • 031-12 34 56
  • 0480-12 34 56
  • 0480-123 45
  • +46(0)8 12 345 67 8

结果我想获得(二NSString的或INT或任何): 用户输入:0707123456
瓦尔1:70
瓦尔2:7123456

用户输入:+46(0)8 12 345 67 8
瓦尔1:8
瓦尔2:12345678

这些是区域代码:

70,730,76,271,322,174,472,371,589,961,960,570,583,226, 624,915,531,652,932,662,921,278,243,33,142,661,456,693,914,912,431,571,295,586,552,653,942,534,271, 381,471,171,246,16,413,223,346,515,23,590,122,585,157,241,943,684,258,528,645,241,493,371,158,498,可以使用本发明的方法制备化合物525,555,595,591,390,514,551,672,970,693,26,31,511,563,975,643,582,220,175,35,696,644,297,922,928,224,本发明的化合物可以通过使用本发明的化合物来制备,所述化合物为: 621,647,36,916,923,480,505,454,294,586,455,54,150,554,320 ,980,494,435,580,977,612,44,550,640,226,19,300,227,303,221,430,925,418,584,247,474,302,478,692,510 ,581,13,642,372,651,657,240,920,46,950,523,913,157,40,280,953,496,159,501,433,530,142,553,250,141 ,392,524,563,499,587,223,930,11,176,918,512,481,155,380,622,297,454,250,304,479,491,643,155,978,435号公报,911,973,623,175,934,457,459,472,924,682,248,224,26,414,416,511,910,222,142,294,500,240,620,952,8 ,951,290,152,433,526,670,695,60,565,220,418,585,680,325,687,246,564,533,253,225,382,293,270,121,456 ,504,502,293,60,477,304,417,691,560,16,486,345,325,140,​​410,520,156,954,292,506,522,613,321,90,18 ,143,393,156,123,281,512,340,383,125,940,492,933,151,495,498,981,976,322,521,935,370,490,21,470,411 ,571,532,690,647,573,474,941,120,476,251,929,431,144,485,295,19,173,660,291,63,292,173,926,927,

我该如何用Objective-c做到这一点?

+1

为什么在你的第二个例子VAR2 8位数?这些都是美国的电话号码吗? – Danny

+1

不与'+ 46'国家代码 - 不,他们不是美国的电话号码 –

+0

好吧,如果你想在世界的所有可能的区号,准备写一个巨大的正则表达式:d – FailedDev

我对Objective-c不是很熟悉,但是应该解析所有提供的示例条目,假设国家代码为+46或者没有国家代码,并支持列出的所有区域代码,从而给出这些结果:

input        (1)  (2)  (3) 
---------------------    ------ ------ --------------- 
0707123456         70  7123456 
0707-123456        70  7-123456 
0707-12 34 56        70  7-12 34 56 
08-123 456 78        8  123 456 78 
08-123 45 67        8  123 45 67 
031-123 45 67        31  123 45 67 
031-12 34 56        31  12 34 56 
0480-12 34 56        480  12 34 56 
0480-123 45        480  123 45 
+468 123 456 78     +46  8  123 456 78 
+46 (0) 8 12 345 67 8    +46  8  12 345 67 8 

是此表达式:

^[ -]*(\+46)?[ -]*[(0)]*[ -]*(70|730|76|271|322|174|472|371|589|961|960|570|583|226|624|915|531|652|932|662|921|278|243|33|142|661|456|693|914|912|431|571|295|586|552|653|942|534|271|381|471|171|246|16|413|223|346|515|23|590|122|585|157|241|943|684|258|528|645|241|493|371|158|498|525|555|591|390|514|551|672|970|693|26|31|511|563|975|643|582|220|175|35|696|644|297|922|928|224|684|225|291|42|513|301|503|290|671|506|650|495|36|663|345|591|611|451|42|491|415|413|253|247|971|621|647|36|916|923|480|505|454|294|586|455|54|150|554|320|980|494|435|580|977|612|44|550|640|226|19|300|227|303|221|430|925|418|584|247|474|302|478|692|510|581|13|642|372|651|657|240|920|46|950|523|913|157|40|280|953|496|159|501|433|530|142|553|250|141|392|524|563|499|587|223|930|11|176|918|512|481|155|380|622|297|454|250|304|479|491|643|155|978|435|911|973|623|175|934|457|459|472|924|682|248|224|26|414|416|511|910|222|142|294|500|240|620|952|8|951|290|152|433|526|670|695|60|565|220|418|585|680|325|687|246|564|533|253|225|382|293|270|121|456|504|502|293|60|477|304|417|691|560|16|486|345|325|140|410|520|156|954|292|506|522|613|321|90|18|143|393|156|123|281|512|340|383|125|940|492|933|151|495|498|981|976|322|521|935|370|490|21|470|411|571|532|690|647|573|474|941|120|476|251|929|431|144|485|295|19|173|660|291|63|292|173|926|927)[ -]*((?:\d[ -]*)+) 

的一个限制是区号必须是连续的数字(即,或07070,但不是0 7-00 7 0

它将首先匹配国家代码(如果存在),并将其存储在反向引用1中,然后忽略单个零。然后,它将匹配区域代码中的一个,并将其存储在背景文献2.然后将得到任何数量的数字(一个或多个)中,用短划线(-)和空间()混合,并存储那些成向后引用3

要获得最后一部分的固定数字(即从123 45-6-78得到12345678),您将需要运行另一个查找和替换来摆脱空格和连字符/破折号。它可以是一个或者传统的文字只能找到替换,或者它可以使用像一个正则表达式:[ -](以零长度字符串替换)

+0

我会+1所有你遇到的麻烦,但这不是我认为正则表达式的问题:) – FailedDev

+0

谢谢!伟大的表达,真的很适合我。我已经创建了一个PHP脚本,我需要将它移植到objective-c中,并且可以使用'preg_replace(“#[^ \ d]#”,“”,$ string)'删除所有非数字字符,但这也会删除+符号,我将不得不在之前检查。现在我只需要了解如何在Objective-C中执行此操作。再次感谢! –

+0

我接受你的答案,即使它没有完全解决我的困境。然而找出如何做到这一点在Objective-C是一件容易的事跟你写的,所以我会我自己的答案添加到objective-表达比较当我完成时,c部分。 –