How to validate an e-mail address in swift? How to validate an e-mail address in swift? ios ios

How to validate an e-mail address in swift?


I would use NSPredicate:

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

for versions of Swift earlier than 3.0:

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

for versions of Swift earlier than 1.2:

func isValidEmail(email: String) -> Bool {    let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"    if let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx) {        return emailPred.evaluateWithObject(email)    }    return false}


As a String class extension

SWIFT 4

extension String {    func isValidEmail() -> Bool {        // here, `try!` will always succeed because the pattern is valid        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.firstMatch(in: self, options: [], range: NSRange(location: 0, length: count)) != nil    }}

Usage

if "rdfsdsfsdfsd".isValidEmail() {}


Editing, updated for Swift 3:

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

Original answer for Swift 2:

func validateEmail(enteredEmail:String) -> Bool {    let emailFormat = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"    let emailPredicate = NSPredicate(format:"SELF MATCHES %@", emailFormat)    return emailPredicate.evaluateWithObject(enteredEmail)}

It's working fine.