Получение ареакода с номера телефона - PullRequest
0 голосов
/ 19 ноября 2011

Я разрешаю пользователю отправить номер телефона. Нет никаких ограничений на то, как это вводится. Что мне нужно от этого номера телефона, это две вещи; Ареакод (исключая ведущий 0) и остальную часть номера телефона. Оба без цифр.

Возможные сценарии, которые может ввести пользователь:

  • 0707123456
  • 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
  • + 468 123 456 78
  • + 46 (0) 8 12 345 67 8

Результат, который я хочу получить (две строки NSS или 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, 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, 293, 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

Как я могу сделать это с Objective-c?

1 Ответ

2 голосов
/ 19 ноября 2011

Я не очень знаком с 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[ -]*)+)

Единственное ограничение состоит в том, что код города должен быть непрерывными цифрами (т. е. 070 или 70, но не0 7-0 или 0 7 0)

Сначала он будет соответствовать коду страны, если он присутствует, и сохранит его в обратной ссылке 1, а затем проигнорирует один ноль.Затем он будет соответствовать одному из кодов области и сохранит его в обратной ссылке 2. Затем он получит любое количество цифр (одну или несколько), смешанных с тире (-) и пробелами (), и сохранит их.в обратную ссылку 3

Чтобы получить сплошное число в последней части (т. е. получить 12345678 из 123 45-6-78), вам нужно будет выполнить другую операцию поиска и замены, чтобы избавиться от пробелов и дефисов / тире,Это может быть либо обычный текстовый поиск-замена, либо регулярное выражение типа: [ -] (заменяется строкой нулевой длины)

...