2016-04-22 151 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 

}