从电话号码获取区号

发布于 2024-12-17 07:07:11 字数 1907 浏览 3 评论 0原文

我让用户提交电话号码。输入方式没有限制。 我需要从这个电话号码得到两件事:区号(不包括前导 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

我想得到的结果(两个 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、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

我怎样才能用 Objective-c 做到这一点?

I am letting a user submit a phonenumber. There are no restrictions on how this is entered.
What I need from this phone number are two things; The areacode (excluding the leading 0) and the rest of the phonenumber. Both without an non-digit chars.

Possible scenarios the user might enter:

  • 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

Result I want to get (two NSStrings or int or whatever):
User enters: 0707123456
Var 1: 70
Var 2: 7123456

User enters: +46 (0) 8 12 345 67 8
Var 1: 8
Var 2: 12345678

These are the area codes:

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

How can I do this with Objective-c?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

欲拥i 2024-12-24 07:07:11

我对 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),你需要跑另一个查找并替换以删除空格和连字符/破折号。它可以是传统的纯文本查找替换,也可以使用正则表达式,例如:[-](用零长度字符串替换)

I am not very familiar with Objective-c, but an answer that should parse all of the provided example entries, assuming either a country code of +46 or no country code, and supporting all of the area codes listed, thus giving these results:

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

is this expression:

^[ -]*(\+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[ -]*)+)

The one restriction is that the area code must be contiguous digits (i.e. 070 or 70, but not 0 7-0 or 0 7 0)

It will first match the country code, if it is present, and store it in back-reference 1, then ignore a single zero. It will then match one of the area codes and store it in back-reference 2. It will then get any number of digits (one or more), mixed with dashes (-) and spaces () and store those into back-reference 3

To get a solid number in the last part (i.e. get 12345678 from 123 45-6-78), you will need to run another find and replace to get rid of spaces and hyphens/dashes. It can either be a either traditional text-only find-replace, or it could use a regex like: [ -] (replaced with a zero-length string)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文