Email & Phone Validation in Swift

后端 未结 21 1767
长发绾君心
长发绾君心 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:36

    File-New-File.Make a Swift class named AppExtension.Add the following.

            extension UIViewController{
                func validateEmailAndGetBoolValue(candidate: String) -> Bool {
                    let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"
                    return NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluateWithObject(candidate)
                }
            }
    
            Use: 
            var emailValidator:Bool?
            self.emailValidator =  self.validateEmailAndGetBoolValue(resetEmail!)
                            print("emailValidator : "+String(self.emailValidator?.boolValue))
    
            Use a loop to alternate desired results.
    
    
        OR
            extension String
            {
            //Validate Email
                var isEmail: Bool {
                    do {
                        let regex = try NSRegularExpression(pattern: "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$", options: .CaseInsensitive)
                        return regex.firstMatchInString(self, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count)) != nil
                    } catch {
                        return false
                    }
    
                }
            }
    
            Use:
            if(resetEmail!.isEmail)
                            {
                            AppController().requestResetPassword(resetEmail!)
                            self.view.makeToast(message: "Sending OTP")
                            }
                            else
                            {
                                self.view.makeToast(message: "Please enter a valid email")
                            }
    
    0 讨论(0)
  • 2020-12-07 12:38

    Kirit Modi's response about Email Validation for Swift 3:

    func isValidEmail(testStr:String) -> Bool {
        let emailRegEx = "^(?:(?:(?:(?: )*(?:(?:(?:\\t| )*\\r\\n)?(?:\\t| )+))+(?: )*)|(?: )+)?(?:(?:(?:[-A-Za-z0-9!#$%&’*+/=?^_'{|}~]+(?:\\.[-A-Za-z0-9!#$%&’*+/=?^_'{|}~]+)*)|(?:\"(?:(?:(?:(?: )*(?:(?:[!#-Z^-~]|\\[|\\])|(?:\\\\(?:\\t|[ -~]))))+(?: )*)|(?: )+)\"))(?:@)(?:(?:(?:[A-Za-z0-9](?:[-A-Za-z0-9]{0,61}[A-Za-z0-9])?)(?:\\.[A-Za-z0-9](?:[-A-Za-z0-9]{0,61}[A-Za-z0-9])?)*)|(?:\\[(?:(?:(?:(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5]))\\.){3}(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5]))))|(?:(?:(?: )*[!-Z^-~])*(?: )*)|(?:[Vv][0-9A-Fa-f]+\\.[-A-Za-z0-9._~!$&'()*+,;=:]+))\\])))(?:(?:(?:(?: )*(?:(?:(?:\\t| )*\\r\\n)?(?:\\t| )+))+(?: )*)|(?: )+)?$"
        let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
        let result = emailTest.evaluate(with: testStr)
        return result
      }
    
    0 讨论(0)
  • 2020-12-07 12:39

    Using Swift 3

     func validate(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:40

    Phone regex only for ّIran phone number

    func isValidPhone(phone: String) -> Bool {
    
            let PHONE_REGEX = "^09[0-9'@s]{9,9}$"
            let phoneTest = NSPredicate(format: "SELF MATCHES %@", PHONE_REGEX)
            let result =  phoneTest.evaluate(with: phone)
            return result
    
        }
    
    0 讨论(0)
  • 2020-12-07 12:40

    You can create separate class for validation as below:

    enum AIValidationRule: Int {
    case
    EmptyCheck,
    MinMaxLength,
    FixedLength,
    EmailCheck,
    UpperCase,
    LowerCase,
    SpecialCharacter,
    DigitCheck,
    WhiteSpaces,
    None
    

    }

    let ValidationManager = AIValidationManager.sharedManager
    
    
    func validateTextField(txtField:AITextField, forRule rule:AIValidationRule, withMinimumChar minChar:Int, andMaximumChar maxChar:Int) -> (isValid:Bool, errMessage:String, txtFieldWhichFailedValidation:AITextField)? {
    
        switch rule {
    
        case .EmptyCheck:
            return (txtField.text?.characters.count == 0) ? (false,"Please enter \(txtField.placeholder!.lowercased())",txtField) : nil
    
    
        case .MinMaxLength:
            return (txtField.text!.characters.count < minChar || txtField.text!.characters.count > maxChar) ? (false,"\(txtField.placeholder!) should be of \(minChar) to \(maxChar) characters",txtField) : nil
    
        case .FixedLength:
            return (txtField.text!.characters.count != minChar) ? (false,"\(txtField.placeholder!) should be of \(minChar) characters",txtField) : nil
    
    
        case .EmailCheck:
            return (!(txtField.text?.isValidEmail())!) ? (false,"Please enter valid email",txtField) : nil
    
    
        case .UpperCase:
            return ((txtField.text! as NSString).rangeOfCharacter(from: NSCharacterSet.uppercaseLetters).location == NSNotFound) ? (false,"\(txtField.placeholder!) should contain atleast one uppercase letter",txtField) : nil
    
    
        case .LowerCase:
            return ((txtField.text! as NSString).rangeOfCharacter(from: NSCharacterSet.lowercaseLetters).location == NSNotFound) ? (false,"\(txtField.placeholder!) should contain atleast one lowercase letter",txtField) : nil
    
    
        case .SpecialCharacter:
            let symbolCharacterSet = NSMutableCharacterSet.symbol()
            symbolCharacterSet.formUnion(with: NSCharacterSet.punctuationCharacters)
            return ((txtField.text! as NSString).rangeOfCharacter(from: symbolCharacterSet as CharacterSet).location == NSNotFound) ? (false,"\(txtField.placeholder!) should contain atleast one special letter",txtField) : nil
    
    
        case .DigitCheck:
            return ((txtField.text! as NSString).rangeOfCharacter(from: NSCharacterSet(charactersIn: "0123456789") as CharacterSet).location == NSNotFound) ? (false,"\(txtField.placeholder!) should contain atleast one digit letter",txtField) : nil
    
        case .WhiteSpaces:
            return (txtField.text!.containsAdjacentSpaces() || txtField.text!.isLastCharcterAWhiteSpace()) ? (false,"\(txtField.placeholder!) seems to be invalid",txtField) : nil
    
        case .None:
            return nil
        }
    }
    
        func validateTextField(txtField:AITextField, forRules rules:[AIValidationRule]) -> (isValid:Bool, errMessage:String, txtFieldWhichFailedValidation:AITextField)? {
        return validateTextField(txtField: txtField, forRules: rules, withMinimumChar: 0, andMaximumChar: 0)
    }
    
    
    
    func validateTextField(txtField:AITextField, forRules rules:[AIValidationRule], withMinimumChar minChar:Int, andMaximumChar maxChar:Int) -> (isValid:Bool, errMessage:String, txtFieldWhichFailedValidation:AITextField)? {
    
        var strMessage:String = ""
        for eachRule in rules {
    
            if let result = validateTextField(txtField: txtField, forRule: eachRule, withMinimumChar: minChar, andMaximumChar: maxChar) {
                if(eachRule == AIValidationRule.EmptyCheck){
                    return result
                }else{
                    strMessage += "\(strMessage.characters.count == 0 ? "" : "\n\n") \(result.errMessage)"
                }
            }
        }
        return strMessage.characters.count > 0 ? (false,strMessage,txtField) : nil
    }
    
    0 讨论(0)
  • 2020-12-07 12:42

    For Swift 3.0 and above

    var isPhoneNumber: Bool{
    let allowedCharacters = CharacterSet(charactersIn: "+0123456789").inverted
    let inputString = components(separatedBy: allowedCharacters)
    let filtered = inputString.joined(separator: "")
    return self == filtered}
    
    0 讨论(0)
提交回复
热议问题