MSLibrary。 iOSなどの正芏衚珟を䜿甚した電話番号のキャプチャず怜蚌...パヌト1

䞀連の蚘事が衚瀺される理由は、iOSラむブラリのMSLibraryでの䜜業䞭に蓄積された倚くの分析的で実甚的な資料でした。 MSLibraryラむブラリには倚くのクラスが含たれおおり、開発者のルヌチン䜜業を簡玠化し、開発時間ずコヌドサむズを倧幅に削枛するために蚭蚈されたさらに倚くの関数ずマクロが含たれおいたす。 しかし、すべおには時間がありたす。ラむブラリに぀いおは埌で説明したす。

そのため、正芏衚珟を䜿甚しお電話番号をキャプチャしお怜蚌したす。 どういう話があるのでしょうか 誰が自分自身の曞き方を知っおいるのか、そしお誰がWorld Wide Webの広倧さに散らばっおいる倚くの既成の゜リュヌションの1぀をコピヌするのか知らないのです。 唯䞀の質問は、圌が䜕を曞くのか、䜕をコピヌするのか、そしおこのコヌドは珟圚の囜際基準、業界基準、䌁業基準だけでなく、タスクセットにどの皋床察応するのかずいうこずです。 最も単玔な゜リュヌションであっおも、開発者が自分の䜜業を十分に認識しおおり、䜜業に絶察に自信がある堎合にのみ、適切な゜リュヌションです。

最も単玔な゜リュヌションであっおも、開発者が自分の䜜業を十分に認識しおおり、䜜業に絶察に自信がある堎合にのみ、適切な゜リュヌションです。


実際、蚘事のトピックはすでにタむトル自䜓に2぀に分かれおいたす。 キャプチャずは、テスト察象の数字ず蚘号のセットが電話番号になる可胜性があるこずを理解する機胜です。 そしお、怜蚌は、このセットが特定の事前蚭定条件を満たしおいるかどうかのチェックです。 䞊蚘の䟋を芋るず、これらのタスクが異なるこずを簡単に確認できたす。

 + 1408-996-10-10 = 1234
 +14089961010; ext = 1234

最初のケヌスでは、だれかが慣れ芪しんだ方法で電話を録音しようずし、2番目のケヌスでは、電話は囜際暙準RFC 3966に埓っお録音されたした。 問題は、これらの゚ントリの䞡方を䜿甚しお、たずえばiOSアプリケヌションで電話番号をダむダルしようずするず、残念ながら、䜕も埗られないこずです。 前者の堎合、システムはたったく䜕も理解したせん。埌者の堎合、内線番号「1234」の代わりに、システムは完党に異なる番号をダむダルしたすこれは非垞に説埗力のある実隓です。詊しおみおください。コヌドは以䞋に瀺したす。

iOSアプリケヌションからの電話の簡単なコヌド。
NSString *telString =@"tel:+14089961010;ext=1234"; NSURL *urlString = [NSURL URLWithString: telString ]; [[UIApplication sharedApplication] openURL:urlString]; 


基本的に、䞡方のタスクキャプチャヌず怜蚌は同じ方法で解決されたすが、適甚される正芏衚珟のみが違いたす。

最初のステップは、この問題を管理するRFC 3966で曞かれおいるこずを確認するこずです。 そしお、以䞋は非垞に単玔化された圢匏で曞かれおいたす

RFC 3966に準拠した簡易電話URI構造


  telephone-uri = "tel"電話加入者 

  •  電話加入者=グロヌバル番号 
  •  グロヌバル番号=グロヌバル番号桁*パヌ 
  •   par =拡匵|  isdn-subaddress | パラメヌタ 
  •   isdn-subaddress = "; isub =" 1 * uric 
  •   extension = "; ext =" 1 * phonedigit 
  •   global-number-digits = "+" * phonedigit DIGIT * phonedigit 
  •  パラメヌタ= ";"  pname ["=" pvalue] 
  •   pname = 1 *alphanum | "-" 
  •   pvalue = 1 * paramchar 
  •   paramchar = param-unreserved | 予玄なし|  pct゚ンコヌド 
  •  未予玄= alphanum | マヌク 
  •  マヌク= "-" |  「_」|  「。」  |  「」  |  「〜」|  「*」「 '」|  「」|「」 
  •   param-unreserved = "[" |  「]」|  「/」|  「」|  「」|  「+」|  「$」 
  •   phonedigit = DIGIT |  [ビゞュアルセパレヌタヌ] 
  •   visual-separator = "-" |  「。」  |  「」|「」 
  •   alphanum = ALPHA | 桁 
  •  予玄枈み= ";"  |  「/」|  「」  |  「」|  「@」|  「」|  "=" |  「+」|  「$」|  「、」 
  •   uric =予玄枈み| 予玄なし 

ここで、ALPHAおよびDIGITは、別のドキュメントから次のようにRFC 2396です。
  •   DIGIT = "0" |  「1」|  「2」|  「3」|  「4」|  「5」|  「6」|  「7」|  「8」|  「9」 
  •   ALPHA = lowalpha | アップアルファ 
  •   lowalpha = "a" |  「b」|  「c」|  「d」|  「e」|  「f」|  「g」|  「h」|  「i」|  「j」|  「k」|  「l」|  「m」|  「n」|  「o」|  「p」|  「q」|  「r」|  「s」|  「t」|  「u」|  「v」|  「w」|  「x」|  「y」|  「z」 
  •   upalpha = "A" |  「B」|  「C」|  「D」|  「E」|  「F」|  「G」|  「H」|  「私」|  「J」|  「K」|  「L」|  「M」|  「N」|  「O」|  「P」|  「Q」|  「R」|  「S」|  「T」|  「U」|  「V」|  「W」|  「X」|  「Y」|  「Z」 

回路図の電話URIは、次のように衚すこずができたす。

 telephone-uri =    [  ] 
図 1

RFC 3966から、次のようになりたす。


ここで


実際にはモバむルアプリケヌション、特にiOSアプリケヌション、およびほずんどのサむトで䜜業する堎合、内線電話番号のみがあるため、telephone-uriスキヌムは次のように倉換されたす。

 telephone-uri = global-number-digits [extension] 
図 2

たたは、global-number-digitsおよびextensionに適切な倀を代入したす。

 telephone-uri = "+" *phonedigit DIGIT *phonedigit [";ext=" 1*phonedigit] 
図 3

ここで、phonedigitは数字「[0-9]」ず芖芚的な区切り文字の限られた範囲で構成されたす

  「-」|  「。」  |  「」|「」 


ここでは、そのように思われたすが、このスキヌムを実装する正芏衚珟の怜蚎に進むこずができたす。 しかし...倚くの著者は、数字のすべおのセットに電話番号があるわけではないこずを正しく指摘しおいたす。 電話番号の構造を定矩する䞀般的に受け入れられおいる囜際慣行がありたす。 はい、ありたす。実際に簡単に怜蚎したす。

囜際電話番号の構造


既存の慣行に埓っお、次のグルヌプを区別できたす。これらのグルヌプは、䞀緒にグロヌバル番号桁の電話番号を構成したす。

グロヌバル番号


延長

この堎合、電話番号の構造は次のようになりたす。

 telephonNumber = "+" country_code [visual-separator] area_code [visual-separator] exchange [visual-separator] subscriber_number [visual-separator] [";ext=" extension] 
図 4

したがっお、RFC 3966暙準ず電話番号の囜際構造を考慮した正芏衚珟を実装するず、蚀い換えるず、図に瀺すスキヌムに察応したす。 3および図 4、次の電話番号の゚ントリは完党に有効です。

 +14089961010; ext = 1234
 +1408996-1010; ext = 1234
 + 1-408-996-10-10; ext = 1234
 +1.408.996.1010; ext = 1234


以䞋は、芖芚的な区切り蚘号が囜際電話番号暙準で定矩されおいる構造の倖偎にあるため、RFC 3966暙準に基づいおのみ有効です。

 +1408996-1010; ext = 1234
 + 1-408996-10-10; ext = 1234
 +1.408996.1010; ext = 1234


実際には、ナヌザヌは、アプリケヌションたたはWebサむトで指定されたテンプレヌトに埓っお、たたは適切ず思われる぀たり、奜みに応じお電話番号をダむダルできたす。 そしお、アプリケヌションは、受信した文字列をその䞭に定められた暙準に埓っお凊理したす。 垞に䞀臎するずは限りたせん。

実際には、ナヌザヌは、アプリケヌションたたはWebサむトで指定されたテンプレヌトに埓っお、たたは適切ず思われる぀たり、奜みに応じお電話番号をダむダルできたす。 そしお、アプリケヌションは、受信した文字列をその䞭に定められた暙準に埓っお凊理したす。 垞に䞀臎するずは限りたせん。



䌁業のWEBダむダル暙準


なぜりェブ iOS、および他のほずんどすべおのシステム、そしおもちろんWebサむトでは、電話をかける最も簡単な方法は、よく知られおいるhtmlスキヌムを䜿甚するこずです。

 <a href="tel:1-408-996-1010">1-408-996-1010</a> 
図 5

蚘事の冒頭で、Objective-Cでこのスキヌムを実装するためのコヌドの䟋が既に提䟛されおいたすが、䞀貫性を保぀ために、繰り返す䟡倀がありたす。

 NSString *telString =@"tel:+14089961010"; NSURL *urlString = [NSURL URLWithString: telString ]; [[UIApplication sharedApplication] openURL:urlString]; 
図 6

䌁業暙準に進みたしょう。

Googleの専門家はこれに぀いお䜕ず蚀っおいたすか
電話番号は垞に囜際ダむダル圢匏プラス蚘号+、囜コヌド、垂倖局番、および番号を䜿甚しお提䟛しおください。 絶察に必芁ずいうわけではありたせんが、読みやすく、自動怜出を向䞊させるために、数字の各セグメントをハむフン-で区切るこずをお勧めしたす。

぀たり、囜番号の前に「+」蚘号を配眮し、「良いアむデアかもしれたせん」電話番号のセグメントグルヌプをハむフン「-」の圢匏の芖芚的な区切り蚘号で区切る必芁がありたす。 それは、䞀般に、RFC 3966および囜際電話番号構造ず非垞に䞀貫しおいたす。぀たり、図1に瀺されおいるスキヌムに察応しおいたす。 3および図 4.ただし、重芁なBUTが1぀ありたす。 芖芚的な区切り文字は1文字、ハむフン「-」に制限されおいたす。 これはもちろん、ブラりザが芖芚的な区切りずしお括匧やドットに䞍適切に応答するこずを意味するものではありたせんが、これには慎重な怜蚌が必芁です。Googleドキュメントはハむフンのみを保蚌したす。 さらに、マニュアルのこのセクションでは、拡匵圢匏に぀いおは䜕も蚀及しおいたせん。 この蚘事は䞻にiOSアプリケヌションに焊点を圓おおいるため、Gugolovsky゜フトりェアの詳现を掘り䞋げるこずはせず、興味のある人は実隓しお結果に぀いお話すこずができたす。

アップルは、 電話リンクのセクションで、電話番号の蚱容される圢匏に関しおさらに簡朔です。次のフレヌズがありたす。
tel URLスキヌムの詳现に぀いおは、RFC 2806およびRFC 2396を参照しおください。

正匏には、すべおが正しいのですが、囜際暙準があるのになぜ繰り返すのですか しかし、実際には、Appleの䌁業暙準ずGoogleの暙準は、これらの囜際暙準の䞀郚にしか察応しおいないずいうこずです。

䌁業暙準は、囜際暙準の䞀郚にしか察応しおいたせん。これは、本来、掚奚事項であるこずがよくありたす。


iOSアプリケヌションの電話番号で䜿甚できるものず䜿甚できないもの


実隓では、RFC 3966で芏制されおいる4皮類すべおの芖芚的セパレヌタにシステムが適切に応答するこずが瀺されたした。


さらに、セパレヌタは任意の堎所に配眮でき、さらにペアを解陀できたす。 䟋ずしお、電話番号の次のレコヌドは、図に瀺すコヌドによっお凊理されたす。 6、同等か぀非垞に適切

 +14089961010
 +1(408)996-1010
 + 1-408-996-10-10
 +1.408.996.1010
 +1408996-1010
 + 1-408996-10-10
 +1.408996.1010
 + 1-408996-10-10
 +1.408996.1010


内線番号をダむダルする堎合ずは状況が異なりたす。 蚘事の冒頭で述べたように、システムは拡匵コヌド「; ext = "RFC 3966で提案されたプレフィックス」に正しく応答したせん。 ネむティブ、぀たりシステムにずっお自然なのは、「;」の2文字です。 および「、」。

最初のケヌスでは、システムが電話番号に区切り文字「;」を怜出するず、ダむダルが停止し、内線番号の数字が画面に衚瀺されたす。 それらをクリックするず、ダむダルが続行されたす。

2番目のケヌスでは、システムが電話番号に区切り文字「、」を怜出するず、この時点でダむダルが停止し、玄2秒の短い䞀時停止埌に自動的に続行したす。 芖芚的な区切り文字「、」は、「,,,,」のように単䞀ではない堎合がありたす。 この堎合、䞀時停止の期間は文字数に比䟋しお長くなりたす。

RFC 3966で芏制されおいる「; ext = "」圢匏の区切り蚘号が衚瀺される堎合、次のようになりたす。システムは蚘号「;」を取りたす。 内線番号をダむダルする前にブレヌクポむントごずに、「内線」蚘号は内線番号が始たる数字ずしお解釈されたす。



そのため、理論的および実甚的な前提条件を怜蚎し、蚘事の2番目の郚分、぀たり電話番号の取埗ず怜蚌に適した正芏衚珟に進むこずができたす。

この資料がお圹に立おば幞いです。MSLibraryfor iOSチヌム

その他の蚘事
iOSなどの正芏衚珟を䜿甚した電話番号のキャプチャず怜蚌...パヌト2
iOSなどで、ビットマスクを䜿甚しお耇数の条件を実装する...
簡単iOSだけでなく、文字列から䞍芁な文字を削陀したす...
Xcodeでのクロスプラットフォヌムナニバヌサルラむブラリの䜜成ずコンパむル

Source: https://habr.com/ru/post/J278345/


All Articles