2016-04-22 79 views
0

我有一個文本字段用於輸入電話號碼,用戶必須按OK按鈕。檢查有效的電話號碼

然後我寫一些函數來檢查輸入的數字是有效數字還是10位數字。我不想添加國家代碼。我分開了。

但是,當我按OK按鈕它給我uialert - 錯誤的號碼,包括我自己的號碼在內的所有號碼。我不知道我錯過了什麼代碼?

func validate(value: String) -> Bool { 
     let PHONE_REGEX = "^\\d{3}-\\d{3}-\\d{4}$" 
     var phoneTest = NSPredicate(format: "SELF MATCHES %@", PHONE_REGEX) 
     var result = phoneTest.evaluateWithObject(value) 
     return result 
    } 

    @IBAction func confirmAction(sender: AnyObject) { 

     if validate(phoneNumber.text!) 
     { 
      print("Validate EmailID") 
      let phone = countryCode.text! + phoneNumber.text! 
      UserNetworkInterface().generateSms(phone, onCompletion: nil) 
      performSegueWithIdentifier("ConfirmSmsCode", sender: self) 
     } 
     else 
     { 
      print("invalide EmailID") 
      let alert = UIAlertView() 
      alert.title = "Message" 
      alert.message = "Enter Valid Contact Number" 
      alert.addButtonWithTitle("Ok") 
      alert.delegate = self 
      alert.show() 
     } 
    } 

更新時間:

@IBAction func confirmAction(sender: AnyObject) { 

     if let phoneNumberValidator = phoneNumber.isPhoneNumber 
     { 
      print("Validate EmailID") 
      let phone = countryCode.text! + phoneNumber.text! 
      UserNetworkInterface().generateSms(phone, onCompletion: nil) 
      performSegueWithIdentifier("ConfirmSmsCode", sender: self) 


     } 
     else 
     { 
      print("invalide EmailID") 
      let alert = UIAlertView() 
      alert.title = "Message" 
      alert.message = "Enter Valid Contact Number" 
      alert.addButtonWithTitle("Ok") 
      alert.delegate = self 
      alert.show() 
      phoneNumber.text = "" 


     } 
        // Number valid 


    } 
+0

我用[PhoneNumberKit(https://開頭github上。 com/marmelroy/PhoneNumberKit),用於驗證和檢查電話號碼是否有效。此外,字符串的格式。我建議你看看:)希望它有幫助 – senty

+0

你能指定一些測試用例嗎? 你使用哪些數字來檢查,哪些數據應該是正確的? – Pietro

+0

這取決於國家。英國有+44,美國有+1。這是所有不同的..這個庫處理案件很好.. – senty

回答

7

試試這個。

對String進行擴展。

夫特4

extension String { 
    var isPhoneNumber: Bool { 
     do { 
      let detector = try NSDataDetector(types: NSTextCheckingResult.CheckingType.phoneNumber.rawValue) 
      let matches = detector.matches(in: self, options: [], range: NSMakeRange(0, self.count)) 
      if let res = matches.first { 
       return res.resultType == .phoneNumber && res.range.location == 0 && res.range.length == self.count 
      } else { 
       return false 
      } 
     } catch { 
      return false 
     } 
    } 
} 

舊版夫特版本

extension String { 
    var isPhoneNumber: Bool { 
     do { 
      let detector = try NSDataDetector(types: NSTextCheckingType.PhoneNumber.rawValue) 
      let matches = detector.matchesInString(self, options: [], range: NSMakeRange(0, self.characters.count)) 
      if let res = matches.first { 
       return res.resultType == .PhoneNumber && res.range.location == 0 && res.range.length == self.characters.count 
      } else { 
       return false 
      } 
     } catch { 
      return false 
     } 
    } 
} 

用法:

override func viewWillAppear(animated: Bool) { 

//Sample check 
let phoneString = "8888888888" 

let phoneNumberValidator = phoneString.isPhoneNumber 
print(phoneNumberValidator) 

} 
+0

在我的按鈕動作,我應該調用哪個方法函數? – user5513630

+0

let phoneNumberValidator = phoneString.isPhoneNumber print(phoneNumberValidator) –

+0

您能否看到我的按鈕動作代碼,並且您是否可以在if語句中創建此代碼..如果其驗證號碼必須重新指向另一個視圖控制器或必須顯示uialert – user5513630

1

夫特3

對於那些希望使用phone number to have a minimum of 10 characters誰下面的代碼(由@Alvin喬治代碼)

extension String { 
    var isPhoneNumber: Bool { 
     do { 
      let detector = try NSDataDetector(types: NSTextCheckingResult.CheckingType.phoneNumber.rawValue) 
      let matches = detector.matches(in: self, options: [], range: NSMakeRange(0, self.characters.count)) 
      if let res = matches.first { 
       return res.resultType == .phoneNumber && res.range.location == 0 && res.range.length == self.characters.count && self.characters.count == 10 
      } else { 
       return false 
      } 
     } catch { 
      return false 
     } 
    } 
} 

使用

ooverride func viewDidLoad() { 
    super.viewDidLoad() 

    //Example 
    let phoneNumberString = "8500969696" 

    let phoneNumberValidation = phoneNumberString.isPhoneNumber 
    print(phoneNumberValidation) 
    // Prints: true 

}