Email & Phone Validation in Swift

后端 未结 21 1770
长发绾君心
长发绾君心 2020-12-07 12:02

i am using the following code for phone number validation. But i am getting the following error. I cant able to proceed further. Help us to take it forward.

         


        
相关标签:
21条回答
  • 2020-12-07 12:44

    Updated for Swift :

    Used below code for Email, Name, Mobile and Password Validation;

    // Name validation
    func isValidName(_ nameString: String) -> Bool {
    
        var returnValue = true
        let mobileRegEx =  "[A-Za-z]{2}"  // "^[A-Z0-9a-z.-_]{5}$"
    
        do {
            let regex = try NSRegularExpression(pattern: mobileRegEx)
            let nsString = nameString as NSString
            let results = regex.matches(in: nameString, range: NSRange(location: 0, length: nsString.length))
    
            if results.count == 0
            {
                returnValue = false
            }
    
        } catch let error as NSError {
            print("invalid regex: \(error.localizedDescription)")
            returnValue = false
        }
    
        return  returnValue
    }
    
    // password validation
    func isValidPassword(_ PasswordString: String) -> Bool {
    
        var returnValue = true
        let mobileRegEx =  "[A-Za-z0-9.-_@#$!%&*]{5,15}$"  // "^[A-Z0-9a-z.-_]{5}$"
    
        do {
            let regex = try NSRegularExpression(pattern: mobileRegEx)
            let nsString = PasswordString as NSString
            let results = regex.matches(in: PasswordString, range: NSRange(location: 0, length: nsString.length))
    
            if results.count == 0
            {
                returnValue = false
            }
    
        } catch let error as NSError {
            print("invalid regex: \(error.localizedDescription)")
            returnValue = false
        }
    
        return  returnValue
    }
    
    // email validaton
    func isValidEmailAddress(_ emailAddressString: String) -> Bool {
    
        var returnValue = true
        let emailRegEx = "[A-Z0-9a-z.-_]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,3}"
    
        do {
            let regex = try NSRegularExpression(pattern: emailRegEx)
            let nsString = emailAddressString as NSString
            let results = regex.matches(in: emailAddressString, range: NSRange(location: 0, length: nsString.length))
    
            if results.count == 0
            {
                returnValue = false
            }
    
        } catch let error as NSError {
            print("invalid regex: \(error.localizedDescription)")
            returnValue = false
        }
    
        return  returnValue
    }
    
    // mobile no. validation
    func isValidPhoneNumber(_ phoneNumberString: String) -> Bool {
    
        var returnValue = true
        //        let mobileRegEx = "^[789][0-9]{9,11}$"
        let mobileRegEx = "^[0-9]{10}$"
    
        do {
            let regex = try NSRegularExpression(pattern: mobileRegEx)
            let nsString = phoneNumberString as NSString
            let results = regex.matches(in: phoneNumberString, range: NSRange(location: 0, length: nsString.length))
    
            if results.count == 0
            {
                returnValue = false
            }
    
        } catch let error as NSError {
            print("invalid regex: \(error.localizedDescription)")
            returnValue = false
        }
    
        return  returnValue
    }
    

    //How to use?

    let isFullNameValid = isValidName("ray")
    
    if isFullNameValid{
        print("Valid name...")
    }else{
        print("Invalid name...")
    }
    
    0 讨论(0)
  • 2020-12-07 12:45

    Swift 4.2 and Xcode 10.1

    //For mobile number validation
    func isValidPhone(phone: String) -> Bool {
    
        let phoneRegex = "^((0091)|(\\+91)|0?)[6789]{1}\\d{9}$";
        let valid = NSPredicate(format: "SELF MATCHES %@", phoneRegex).evaluate(with: phone)
        return valid
    }
    
    //For email validation
    func isValidEmail(candidate: String) -> Bool {
    
        let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
        var valid = NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: candidate)
        if valid {
            valid = !candidate.contains("..")
        }
        return valid
    }
    

    Use like this

    //Button Action
    @IBAction func onClickRegrBtn(_ sender: UIButton) {
        //Check net connection here
        let networkReachability = Reachability.forInternetConnection()
        let networkStatus:Int = (networkReachability?.currentReachabilityStatus())!.rawValue
        if networkStatus == NotReachable.rawValue {
            let msg = SharedClass.sharedInstance.noNetMsg
            SharedClass.sharedInstance.alert(view: self, title: "", message: msg)//Display alert message
        } else {
    
            let mobileTrimmedString = mobileNoTF.text?.trimmingCharacters(in: .whitespaces) //Trim white spaces
    
            if mobileTrimmedString != "" {
                if isValidPhone(phone: mobileTrimmedString!) == false {
                    SharedClass.sharedInstance.alert(view: self, title: "", message: "Please enter valid mobile number")
                } else {
                    UserDefaults.standard.set(mobileTrimmedString, forKey: "mobile") //setObject
                    sendMobileNumber()//Call function...
                }
    
            } else {
                mobileNoTF.text = ""
                //Call alert function
                SharedClass.sharedInstance.alert(view: self, title: "", message: "Please enter mobile number")
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-07 12:45

    another solution for variety sake..

    public extension String {
        public var validPhoneNumber:Bool {
            let types:NSTextCheckingType = [.PhoneNumber]
            guard let detector = try? NSDataDetector(types: types.rawValue) else { return false }
    
            if let match = detector.matchesInString(self, options: [], range: NSMakeRange(0, characters.count)).first?.phoneNumber {
                return match == self
            }else{
                return false
            }
        }
    }
    
    //and use like so:
    if "16465551212".validPhoneNumber {
        print("valid phone number")
    }
    
    0 讨论(0)
  • 2020-12-07 12:48

    Updated version of iksnae's awesome answer. It's not a regex, but I think it's the best solution to validate all countries' phone numbers as it is smart enough to know if the country's phone extension code is valid as well.

    extension String {
        public var validPhoneNumber: Bool {
            let types: NSTextCheckingResult.CheckingType = [.phoneNumber]
            guard let detector = try? NSDataDetector(types: types.rawValue) else { return false }
            if let match = detector.matches(in: self, options: [], range: NSMakeRange(0, self.count)).first?.phoneNumber {
                return match == self
            } else {
                return false
            }
        }
    }
    
    print("\("+96 (123) 456-0990".validPhoneNumber)") //returns false, smart enough to know if country phone code is valid as well                                                                     
    0 讨论(0)
  • 2020-12-07 12:49

    Swift 3 Validate Email

    class func validateEmail(email: String) -> Bool{
    
        let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
    
        return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: email)
    
    }
    

    Phone Number Validation

    class func validatePhoneNumber(value: String) -> Bool {
    
        let PHONE_REGEX = "^\\d{3}-\\d{3}-\\d{4}$"
        let phoneTest = NSPredicate(format: "SELF MATCHES %@", PHONE_REGEX)
        let result =  phoneTest.evaluate(with: value)
        return result
    }
    
    0 讨论(0)
  • 2020-12-07 12:52

    Swift 4 & Swift 5:

    func isValidPhone(phone: String) -> Bool {
            let phoneRegex = "^[0-9+]{0,1}+[0-9]{5,16}$"
            let phoneTest = NSPredicate(format: "SELF MATCHES %@", phoneRegex)
            return phoneTest.evaluate(with: phone)
        }
    
    func isValidEmail(email: String) -> Bool {
            let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
            let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
            return emailTest.evaluate(with: email)
        }
    

    • +1994423565 - Valid
    • ++1994423565 - Invalid
    • 01994423565 - Valid
    • 001994423565 - Valid
    • something@example.com - Valid
    • something@.com - Invalid
    0 讨论(0)
提交回复
热议问题