2014-10-03 2 views
13

Ich suche nach der einfachsten und saubersten Methode zur Validierung von E-Mail (String) in Swift. In Objective-C habe ich diese Methode verwendet, aber wenn ich sie in Swift umschreibe, erhalte ich beim Erstellen des Prädikats die Fehlermeldung "Die Formatzeichenfolge konnte nicht analysiert werden".Was sind Best Practices für die Validierung von E-Mail-Adressen in Swift?

- (BOOL) validateEmail: (NSString *) candidate { 
    NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,6}"; 
    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 

    return [emailTest evaluateWithObject:candidate]; 
} 
+1

Pleas e posten Sie immer Ihren Code, der nicht funktioniert. –

Antwort

33

Scheint ziemlich einfach. Wenn Sie Probleme mit Ihrer Swift-Konvertierung haben, kann es von Vorteil sein, zu sehen, was Sie tatsächlich versucht haben.

Dies funktioniert für mich:

func validateEmail(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) 
} 

validateEmail("[email protected]")  // true 
validateEmail("[email protected]@google.com") // false 
+0

Nun, der Unterschied besteht nur darin, wie wir das emailRegex in das Prädikat einfügen ... func isEmailValid (strEmail: String) -> Bool { var strEmailRegex = "[A-Z0-9a-z \\ ._% + -] + @ ([A-Za-z0-9 -] + \\.) + [A-Za-z] {2,6} " var prädikativEmail = NSPredikat (Format:" SELF MATCHES \ (strEmailRegex) ") return predicateEmail.evaluateWithObject (strEmail) } –

+0

Richtig - das wird nicht funktionieren, weil Sie dem Initializer 'NSPredate' keine Formatierungsargumente zur Verfügung gestellt haben. Sie müssen noch '% @' verwenden und am Ende über die varargs-Liste übergeben. –

+0

danke! Ich bekomme es jetzt - ich musste nur init Funktion von NSPredicate ein wenig länger suchen :) –

0
 class func isValidEmail(email:String)-> Bool 
     { 
      let emailRegEx = "[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" 
      var emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx) 
      let result = emailTest!.evaluateWithObject(email) 
      return result 
     } 
0

Craigs beantworten funktioniert und wenn jemand es zu implementieren ist, zu kämpfen, hier ist es mit dem textFieldDidEndEditing func es aufgerufen wird. (UITextFieldDelegate erforderlich)

func textFieldDidEndEditing(textField: UITextField) 
{ 
    if validateEmail(emailAddress.text) 
    { 
     println("valid") 
    } 
    else 
    { 
     println("NOT valid") 
    } 
} 

func validateEmail(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) 
} 
2
extension String 
{ 
    func isEmail() -> 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(self) 
    } 
} 
1

Hier ist die Erweiterung ist, die für jede E-Mail-Domäne arbeitet.

Bsp .: .com, .co.uk, .co.in usw.

extension String { 

    func isValidEmail() -> Bool { 

     let emailRegEx = "^[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])?)*$" 
     let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx) 
     return emailTest.evaluateWithObject(self) 
    } 
} 
2

gehen Sie hier in meinen zwei Cent werfen und Sie mit einem kurven Ball getroffen:

Haben Sie wirklich wollen validiere deine E-Mail-Adresse so?

Sehen Sie diese blogpost, das alles, was Sie tun müssen, schlägt vor, eine E-Mail zu überprüfen gültig ist, überprüft sie hat ein @ Symbol oder höchstens ein @ an einem gewissen Punkt, gefolgt von einem .:

/[email protected]+\..+/i

6

Swift 3.0 Version

func validateEmail(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).evaluate(with: candidate) 
} 

validateEmail("[email protected]")  // true 
validateEmail("[email protected]@google.com") // false 
0
func isValidEmail(testStr: String) -> Bool { 
    print("valid Email-ID: \(testStr)") 
    let emailRegEx = "[A-Za-z0-9_%+-][email protected][A-Za-z0-9._]+\\.[A-Za-z]{2,}" 
    let emailTest = NSPredicate(format: "SELF MATCHES %@",emailRegEx) 
    return emailTest.evaluateWithObject(testStr) 
} 
func textFieldDidEndEditing(textField: UITextField) { 
    if isValidEmail(txt_EmailID.text!){ 
     print("Email is Valid") 
    }else{ 
     print("Email is not valid") 
    } 
} 

// creat done button outlet 

@IBAction func btn_Done(sender: AnyObject) { 
    validated() 

}