//
//  OSEmailValidator.swift
//  OSFramework
//
//  Created by Daniel Vela on 21/09/2016.
//  Copyright © 2016 Daniel Vela. All rights reserved.
//

import Foundation

/**
 Email validator class
*/
class OSEmailValidator: NSObject {

    /**
     Validate email

     - Parameter email: email to be validated

     - Returns: **true** if email is valid, **false** otherwise
    */
    func isValid(email: String) -> Bool {
        let emailRegex =
        "(?:[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[a-z0-9!#$%\\&'*+/=?\\^_`{|}" +
        "~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\" +
        "x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-" +
        "z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-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]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21" +
        "-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"
        let emailtest = NSPredicate(format: "SELF MATCHES[c] %@", emailRegex)

        return emailtest.evaluate(with: email)
    }
}
