2016-03-09 49 views
2

NSURL初始化,需要一個String是failable和文檔說:哪個NSCharacterSet描述在tel:URL中有效的字符?

如果URL字符串格式錯誤,返回零。

試圖構造一個帶有NSURL(string: "tel://+49 00 00 00 00 00")的URL返回nil。

stringByAddingPercentEscapesUsingEncoding(_:)和朋友在iOS版9贊成stringByAddingPercentEncodingWithAllowedCharacters(_:),這需要一個NSCharacterSet棄用。哪個NSCharacterSet描述了在tel: URL中有效的字符?

無的

  • URLFragmentAllowedCharacterSet()
  • URLHostAllowedCharacterSet()
  • URLPasswordAllowedCharacterSet()
  • URLPathAllowedCharacterSet()
  • URLQueryAllowedCharacterSet()
  • URLUserAllowedCharacterSet()

...似乎是相關

+0

您可能需要使用正則表達式來驗證電話號碼。 ---- NSString * phoneRegex = @「^((\\ +)|(00))[0-9] {6,14} $」; –

+2

如果您不是[RFC 2806](http://www.ietf.org/rfc/rfc2806.txt)或[RFC 2396](http://www.ietf.org/rfc/rfc2396.txt)的作者),請不要建議任何涉及正則表達式的內容。 –

+0

我沒有明白。什麼是RFC? –

回答

0

可以NSDataDetector類從字符串grep的電話號碼。下一步刪除檢測到的數字中的所有不必要的字符並創建NSURL。

func getPhoneNumber(string: String) -> String? { 
     if let detector = try? NSDataDetector(types: NSTextCheckingType.PhoneNumber.rawValue) { 
      let matches = detector.matchesInString(string, options: [], range: NSMakeRange(0, string.characters.count)) 

      if let string = matches.flatMap({ return $0.phoneNumber}).first { 
       let number = convertStringToNumber(string) 
       return number 
      } 
     } 


     return nil 
    } 

    func convertStringToNumber(var str: String) -> String { 
     let set = NSMutableCharacterSet() 
     set.formUnionWithCharacterSet(NSCharacterSet.whitespaceCharacterSet()) 
     set.formUnionWithCharacterSet(NSCharacterSet.symbolCharacterSet()) 
     set.formUnionWithCharacterSet(NSCharacterSet.punctuationCharacterSet()) 

     str = str.componentsSeparatedByCharactersInSet(set).reduce(String(), combine: +) 

     return str 
    } 

例子:

let possibleNumber = "+49 00 00 00 00 00" 

if let number = getPhoneNumber(possibleNumber), let url = NSURL(string: "tel://\(number)") { 
    print(url.absoluteString) 
} 
+0

我們從代碼中指定的電話號碼列表自己,所以我們不必從自由文本提取出來(不過這是一個有趣的指針。)另外一家領先的'+'是一個電話號碼,一個有效的字符,所以我不認爲我們要脫光了這一點,你的代碼會做。 –

+0

NSDataDetector使用reg exp從字符串獲取電話號碼。它是驗證您實際上包含電話號碼的字符串的好方法。但是你可以不理會getPhoneNumber基金,如果你確定你的電話號碼是正確的。是你需要使用convertStringToNumber FUNC的小改動這種情況。像修剪非數字字符之前,檢查「+」正弦存在,如果返回結果之前,所以在前面加上上線。 – salabaha