Emin Grbo, May 21 2020

Check if Email is valid

Hey there! I won't keep you long, just thought to share this quick snippet with you.

I am currently working on a new project, and started migrating everything from the old one where I had bunch of small helper methods, and now, I am cherry picking the best ones or re-working some older ones.

However, for this email checker i don't think in would ever need a new one.


This extension with check if the email has a valid format. I went through all kinds of iterations and finally stumbled upon this gem online. 💎

Note: This will only check if the FORMAT is valid. It will not verify if that email exists or not. I never needed that check so far, and most of the time you are sending a verification code or something from your server so all non-existent emails are discarded that way.

extension String {

func isValidEmail() -> Bool {
    // `try!` will always succeed because the pattern is valid
    let regex = try! NSRegularExpression(pattern: "(?:[\\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])+)\\])", options: .caseInsensitive)
    return regex.firstMatch(in: self, options: [], range: NSRange(location: 0, length: count)) != nil
}

}

Thank you for reading! Feel free to get in touch on Twitter

Consider subscribing to the newsletter below if you loved the content. I am so lazy I probably won't bore you more than once a week.

Cheers! 🍻

Tagged with: