estoy usando el siguiente código para validación de número de teléfono. Pero estoy recibiendo el siguiente error. I cant poder continuar. Nos ayudan a seguir adelante.

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)
    }
}

De Error : código swift:15:28: valor Enlazado en una condicional de unión debe ser de tipo Opcional

  • No puedo ver claramente un error en su código. Que versión de Xcode están usando? En la línea ¿el error ocurre? – Por supuesto, sería mejor si usted publica un ejemplo que no dependen de otras clases, por lo que podemos solo tienes que pegar el código en Xcode y tratar de encontrar el problema.
  • Parece que usted está utilizando el uso de una anticuada versión de Xcode. Actualización de Xcode 6.1.1 y su problema se ha ido.
InformationsquelleAutor Kums | 2015-01-17

20 Comentarios

  1. 83

    Sí, su Error es inferior en xcode 6.1

    Correo electrónico & Teléfono de Validación en Swift

    Este error se produce debido a IF condicional tiene que Bool tipo de retorno, pero en Su condición de tipo de Retorno es NSPredicate , por lo que usted ha obtenido un error swift: valor Enlazado en una condicional de unión debe ser de tipo Opcional puede resolver de la siguiente manera.

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

    De correo electrónico-Validaciones en 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
        } 

    Uso del Correo electrónico de validación:

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

    Número de teléfono de Validación en 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.evaluateWithObject(value)
            return result
        }
    • Que versión de Xcode estás usando? Esto no compila en mi Xcode 6.1.1 o 6.2beta3. – También OP beneficiaría a más de su respuesta, si usted explicó los errores en su código, en lugar de simplemente publicar el código.
    • Utilizar Xcode 6.1.1, a continuación, actualice el código de arriba
    • ahora código actualizado para la Versión 6.1 (6A1052d) Xcode.
    • Su respuesta no explica por qué OP obtiene un error del compilador para su código.
    • estoy usando xcode 6.0.1.
    • recibiendo el error cerca de a «f vamos a phoneTest = NSPredicate(formato: «AUTO corresponde a %@», PHONE_REGEX) { ———— valor Enlazado en una condicional de unión debe ser de tipo Opcional»…
    • Suena como el NSPredicate inicialización de la función no devuelve un opcional. ¿Alguien puede confirmar eso? Si no no es necesario (de hecho, usted no puede enlazar ese valor en una si-vamos condición.
    • no funciona con [email protected]
    • Tenga en cuenta que let emailRegEx = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" no funciona para la mayoría de la nueva costumbre de dominios de primer nivel que puede ser de más de 4 caracteres. Usted puede actualizar con let emailRegEx = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,}" así que no existe una longitud máxima de restricción para el TLD
    • Es sólo trabajo para .com. No trabajo de cualquier otro que, como .co.uk. Por favor, puedes actualizar?
    • no se actualiza la fórmula para el Correo electrónico. De trabajo [email protected] = false
    • Se debe corregir el código pin de validación en tu blog.
    • Acabo de agregar esto para validar código postal: let zipregex = "^[0-9]{6}$" let zipTest = NSPredicate(format: "SELF MATCHES %@", zipregex) let result = zipTest.evaluateWithObject(value) return result Pero esto sólo funcionará para los indios código postal.
    • Hmm. Bueno. Voy a actualizar después de obtener todo el país. se puede obtener luego me dicen.
    • Swift 4 — func validar(número de teléfono: String) -> Bool { dejar PHONE_REGEX = «^\\d{3}-\\d{3}-\\d{4}$» vamos a phoneTest = NSPredicate(formato: «AUTO corresponde a %@», PHONE_REGEX) vamos a resultado = phoneTest.evaluar(con: número de teléfono) return resultado }
    • Correo electrónico validador de falla mediante la aceptación de la dirección de correo electrónico de «[email protected]ún lugar» como un correo electrónico válido.

  2. 33

    Actualizado para Swift 2.0

    Pegar estas líneas en cualquier lugar en el código.(o en su Constante archivo)

    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._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,}", options: .CaseInsensitive)
                return regex.firstMatchInString(self, options: NSMatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.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
    
        }
    }

    uso del Correo electrónico de Validación:

    if(txtEmail.isEmail){
    }

    Swift 3.0 Actualizado Solución:

    //MARCA:- Validación de la Extensión de

    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._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,}", options: .caseInsensitive)
    return regex.firstMatch(in: self, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.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.characters.count<=20){
    return true
    }else{
    return false
    }
    }else{
    return false
    }
    } catch {
    return false
    }
    }
    }
    • Su validación de correo electrónico está funcionando correctamente
    • plz votar
    • Esto no es correcto. Porque acepta una cadena como «[email protected]» como una dirección de correo electrónico correcta.
    • se puede reescribir último cheque de teléfono en una línea sin dividir y unir return self.rangeOfCharacterFromSet(NSCharacterSet(charactersInString: "+0123456789").invertedSet) == nil
    • por favor, mejorar la respuesta estoy de acuerdo con este tema. También voy a comprobar en mi tiempo libre.
    • He mejorado el correo electrónico de validación de la expresión regular por favor consulte.
    • todavía no es el correcto, si escribe «[email protected]» devuelve true
    • Hola @SourabhSharma hemos mejorado el correo electrónico predicado y swift 4.1 actualización.

  3. 9

    Tal vez un teléfono mejor validador en Swift 2:

    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
    }
    }
    }
    • Para Swift 4.2 var isPhoneNumber: Bool { do { dejar detector = pruebe NSDataDetector(tipos: NSTextCheckingResult.CheckingType.numero de teléfono.rawValue) vamos a partidos = detector.partidos(en el auto, opciones: [], rango: NSMakeRange(0, auto.count)) si vamos a res = partidos.primero { return res.resultType == .número de teléfono && res.la gama.ubicación == 0 && res.la gama.longitud == auto.count } else { return false } } catch { return false } }
  4. 7

    Funciona el siguiente código en xcode 6.3 beta

    func isValidEmail(testStr:String) -> Bool {
    let emailRegEx = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
    let range = testStr.rangeOfString(emailRegEx, options:.RegularExpressionSearch)
    let result = range != nil ? true : false
    return result
    }

    cómo usarlo:

    Ex.

    if isValidEmail(email.text) == false{
    //your code here
    }
    • o simplemente !isValidEmail(testStr: correo electrónico.de texto){ //código }
  5. 7

    Swift 4+

    Puede utilizar simplificado regex "^[6-9]\\d{9}$"

    ^     #Match the beginning of the string
    [6-9] #Match a 6, 7, 8 or 9
    \\d   #Match a digit (0-9 and anything else that is a "digit" in the regex engine)
    {9}   #Repeat the previous "\d" 9 times (9 digits)
    $     #Match the end of the string

    De Referencia

    De la india 10 Dígitos del Móvil de validación(puede comenzar con 6,7,8,9) –

    extension String {
    var isValidContact: Bool {
    let phoneNumberRegex = "^[6-9]\\d{9}$"
    let phoneTest = NSPredicate(format: "SELF MATCHES %@", phoneNumberRegex)
    let isValidPhone = phoneTest.evaluate(with: self)
    return isValidPhone
    }
    } 

    De uso:-

    print("9292929292".isValidContact)//true
    print("5454545454".isValidContact)//false

    Para la validación de correo electrónico puede comprobar este

    • validación de número de teléfono no funciona he probado con «7982391667»
    • true Funcionando bien
    • no bro no su trabajo u puede compartir la forma de u está utilizando para textfield
  6. 6

    Swift 3:

    private func validate(phoneNumber: String) -> Bool {
    let charcterSet  = NSCharacterSet(charactersIn: "+0123456789").inverted
    let inputString = phoneNumber.components(separatedBy: charcterSet)
    let filtered = inputString.joined(separator: "")
    return  phoneNumber == filtered
    }
    • esto sólo se valida que usted tiene todos los dígitos no que es un número de teléfono válido
  7. 6

    Swift 3
    Validar Correo Electrónico

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

    Validación De Número De Teléfono

    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
    }
  8. 5

    Actualizado para Swift 3

    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
    } else {
    return false
    }
    } catch {
    return false
    }
    }
    }
  9. 5

    Swift 4.1.

    func isValidPhone(phone: String) -> Bool {
    let phoneRegex = "^[0-9]{6,14}$";
    let valid = NSPredicate(format: "SELF MATCHES %@", phoneRegex).evaluate(with: phone)
    return valid
    }
    func isValidEmail(candidate: String) -> Bool {
    let emailRegex = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
    var valid = NSPredicate(format: "SELF MATCHES %@", emailRegex).evaluate(with: candidate)
    if valid {
    valid = !candidate.contains("..")
    }
    return valid
    }
  10. 3

    Teléfono regex sólo para ّIrán número de teléfono

    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
    }
  11. 3

    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._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
    let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
    return emailTest.evaluate(with: email)
    }

  12. 1

    Kirit Modi respuesta acerca de la Validación de Correo electrónico para 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
    }
  13. 1

    Para Swift 3.0 y superior

    var isPhoneNumber: Bool{
    let allowedCharacters = CharacterSet(charactersIn: "+0123456789").inverted
    let inputString = components(separatedBy: allowedCharacters)
    let filtered = inputString.joined(separator: "")
    return self == filtered}
    • ¿qué es components?
  14. 1

    Swift y Xcode 4.2 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._%+-][email protected][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
    }

    Uso como esta

    //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")
    }
    }
    }
  15. 0

    Archivo-Nuevo-Archivo.Hacer una rápida clase denominada AppExtension.Añadir el siguiente.

            extension UIViewController{
    func validateEmailAndGetBoolValue(candidate: String) -> Bool {
    let emailRegex = "[A-Z0-9a-z._%+-][email protected][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.!#$%&'*+/=?^_`{|}~-][email protected][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")
    }
  16. 0

    Puede crear clase separada para la validación de la siguiente manera:

    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
    }
  17. 0

    Uso De 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
    }
  18. 0

    Actualizado para Swift :

    Utiliza código de abajo, por Correo electrónico, Nombre, Móvil y Validación de la Contraseña;

    //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 =  "[[email protected]#$!%&*]{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.-_][email protected][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
    }

    //Cómo se utiliza?

    let isFullNameValid = isValidName("ray")
    if isFullNameValid{
    print("Valid name...")
    }else{
    print("Invalid name...")
    }
  19. 0

    «validar Correo electrónico»-Solución para Swift 4:
    Crear esta clase:

    import Foundation
    public class EmailAddressValidator {
    public init() {
    }
    public func validateEmailAddress(_ email: String) -> Bool {
    let emailTest = NSPredicate(format: "SELF MATCHES %@", String.emailValidationRegEx)
    return emailTest.evaluate(with: email)
    }
    }
    private extension String {
    static let emailValidationRegEx = "(?:[\\p{L}0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[\\p{L}0-9!#$%\\&'*+/=?\\^_`{|}" +
    "~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\" +
    "x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[\\p{L}0-9](?:[a-" +
    "z0-9-]*[\\p{L}0-9])?\\.)+[\\p{L}0-9](?:[\\p{L}0-9-]*[\\p{L}0-9])?|\\[(?:(?:25[0-5" +
    "]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-" +
    "9][0-9]?|[\\p{L}0-9-]*[\\p{L}0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21" +
    "-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"
    }

    y utilizarlo como este:

    let validator = EmailAddressValidator()
    let isValid = validator.validateEmailAddress("[email protected]")
  20. -1

    otra solución para variar..

    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")
    }
    • El resultado de validPhoneNumber siempre devuelve «true». Es sólo la creación de un NSTextCheckingResult del tipo phoneNumber, de manera que la comparación es siempre cierto. Creo que deberías intentar usar NSDataDetector.
    • gracias @EPage_Ed se fueron del 100% correcto! He actualizado para reflejar la intención de la aplicación. gracias!

Dejar respuesta

Please enter your comment!
Please enter your name here