【问题标题】:Check the valid phone number检查有效的电话号码
【发布时间】:2016-04-22 09:22:26
【问题描述】:

我有一个输入电话号码的文本字段,用户必须按确定按钮。

然后我编写了一些函数来检查输入的数字是有效数字还是 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


  }

【问题讨论】:

  • 我使用PhoneNumberKit 来处理验证和检查电话号码是否有效。此外,字符串的格式。我建议你看看:) 希望它有帮助
  • 你能指定一些测试用例吗?您使用哪些数字来检查,哪些应该是正确的?
  • 这取决于国家。英国+44,美国+1。这一切都不同..这个库很好地处理了这些案例..
  • 我的个人号码 "9159486839" ...根据我的代码,我收到的 uialert 号码错误
  • 不使用库文件就无法用我的代码重新编码

标签: ios swift


【解决方案1】:

试试这个。

对 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: NSRange(location: 0, length: 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
        }
    }
}

旧 Swift 版本

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)

}

【讨论】:

  • 让 phoneNumberValidator = phoneString.isPhoneNumber print(phoneNumberValidator)
  • 你能看看我的按钮操作代码吗?你能在 if 语句中制作这个代码吗..如果它的验证号我必须重定向到另一个视图控制器或必须显示 uialert
  • 您可能需要更新:'NSTextCheckingType' has been renamed to 'NSTextCheckingResult.CheckingType'
【解决方案2】:

斯威夫特 3

对于那些想要phone number to have a minimum of 10 characters 的人,请使用以下代码(修改后的@Alvin George 代码)

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

}

【讨论】:

    【解决方案3】:

    试试这个印度 10 位数手机号码验证

    var isValidMobileNo: Bool {
        let PHONE_REGEX = "^[7-9][0-9]{9}$";
        let phoneTest = NSPredicate(format: "SELF MATCHES %@", PHONE_REGEX)
        let result =  phoneTest.evaluate(with: self)
        return result
    }
    

    【讨论】:

      【解决方案4】:

      修改了 Swift 4 的 @Alvin George 代码,该代码也只接受 10 位电话号码:

      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 && self.count == 10
                  } else {
                      return false
                  }
              } catch {
                  return false
              }
          }
      } 
      

      【讨论】:

        【解决方案5】:

        轻松验证印度 10 位数手机号码

        func isValidPhone(testStr:String) -> Bool {
            let phoneRegEx = "^[6-9]\\d{9}$"
            var phoneNumber = NSPredicate(format:"SELF MATCHES %@", phoneRegEx)
            return phoneNumber.evaluate(with: testStr)
        }
        

        【讨论】:

          【解决方案6】:

          修改@A.G 的答案以更新到 Swift 5:

          extension String {
              func isValidPhone() -> 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
                  }
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2018-07-07
            • 1970-01-01
            • 2019-12-20
            • 1970-01-01
            • 2022-06-21
            • 1970-01-01
            • 1970-01-01
            • 2014-11-04
            • 2017-10-27
            相关资源
            最近更新 更多