Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Email & Phone Validation in Swift

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.

class PhoneNumberValidation: Validation {     let PHONE_REGEX = "^\\d{3}-\\d{3}-\\d{4}$"      func validate(value: String) -> (Bool, ValidationErrorType) {         if let phoneTest = NSPredicate(format: "SELF MATCHES %@", PHONE_REGEX) {             if phoneTest.evaluateWithObject(value) {                 return (true, .NoError)             }             return (false, .PhoneNumber)         }         return (false, .PhoneNumber)     } } 

Error : swift:15:28: Bound value in a conditional binding must be of Optional type

like image 473
Saikumar Avatar asked Jan 17 '15 10:01

Saikumar


2 Answers

Yes your Error is below in XCode 6.1

Xcode error screenshot

This error is occurs because of if conditional have to Bool return type, but in Your if condition Return type is NSPredicate so that you got error swift: Bound value in a conditional binding must be of Optional type you can solve as below.

    var phoneTest = NSPredicate(format: "SELF MATCHES %@", PHONE_REGEX)          if phoneTest.evaluateWithObject(value) {                   return (true, .NoError)              }                  return (false, .PhoneNumber)             } 

Email-Validations in Swift.

    func isValidEmail(testStr:String) -> Bool {             print("validate emilId: \(testStr)")             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.evaluateWithObject(testStr)             return result         }  

Use of Email-validation:

    if isValidEmail("[email protected]"){             print("Validate EmailID")         }         else{             print("invalide EmailID")         } 

Phone-Number Validation in Swift

    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         } 
like image 99
Kirit Modi Avatar answered Sep 20 '22 20:09

Kirit Modi


Swift 3.0 to 5.0 Updated Solution:

//MARK:- Validation Extension -

extension String {      //To check text field or String is blank or not     var isBlank: Bool {         get {             let trimmed = trimmingCharacters(in: CharacterSet.whitespaces)             return trimmed.isEmpty         }     }      //Validate Email      var isEmail: Bool {         do {             let regex = try NSRegularExpression(pattern: "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}", options: .caseInsensitive)             return regex.firstMatch(in: self, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.count)) != nil         } catch {             return false         }     }      var isAlphanumeric: Bool {         return !isEmpty && range(of: "[^a-zA-Z0-9]", options: .regularExpression) == nil     }      //validate Password     var isValidPassword: Bool {         do {             let regex = try NSRegularExpression(pattern: "^[a-zA-Z_0-9\\-_,;.:#+*?=!§$%&/()@]+$", options: .caseInsensitive)             if(regex.firstMatch(in: self, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count)) != nil){                  if(self.characters.count>=6 && self.count<=20){                     return true                 }else{                     return false                 }             }else{                 return false             }         } catch {             return false         }     } } 

use of Email Validation:

if(txtEmail.isEmail){ } 

Swift 2.0 Solution

Paste these line anywhere in code.(or in your Constant file)

extension String {      //To check text field or String is blank or not     var isBlank: Bool {         get {             let trimmed = stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())             return trimmed.isEmpty         }     }      //Validate Email     var isEmail: Bool {         do {             let regex = try NSRegularExpression(pattern: "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}", options: .CaseInsensitive)             return regex.firstMatchInString(self, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, self.count)) != nil         } catch {             return false         }     }      //validate PhoneNumber     var isPhoneNumber: Bool {          let charcter  = NSCharacterSet(charactersInString: "+0123456789").invertedSet         var filtered:NSString!         let inputString:NSArray = self.componentsSeparatedByCharactersInSet(charcter)         filtered = inputString.componentsJoinedByString("")         return  self == filtered      } } 
like image 33
Sourabh Sharma Avatar answered Sep 19 '22 20:09

Sourabh Sharma