Skip to content

Instantly share code, notes, and snippets.

@egzonpllana
Created May 10, 2021 15:00
Show Gist options
  • Save egzonpllana/5788d802c813a615c911da15bf746ad4 to your computer and use it in GitHub Desktop.
Save egzonpllana/5788d802c813a615c911da15bf746ad4 to your computer and use it in GitHub Desktop.
Email and Password validator - Swift
import Foundation
extension String {
func isValidEmailAddress() -> Bool {
// swiftlint:disable line_length
let emailRegEx = """
(?:[a-zA-Z0-9!#$%\\&‘*+/=?\\^_`{|}~-]+(?:\\.[a-zA-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])+)\\])
"""
// swiftlint:enable line_length
let emailTest = NSPredicate(format: "SELF MATCHES[c] %@", emailRegEx)
return emailTest.evaluate(with: self)
}
}
extension String {
func isValidPassword(minimumCharacters: UInt = 8, numberRequired: Bool = false, anyLetter: Bool = false, lowerCaseLettersRequired: Bool = false, upperCaseLettersRequired: Bool = false) -> Bool {
if self.count < minimumCharacters { return false }
if anyLetter && !self.contains { $0.isLetter } { return false }
if numberRequired && !self.contains { $0.isNumber } { return false }
if lowerCaseLettersRequired && !anyLetter && !self.contains { $0.isLowercase } { return false }
if upperCaseLettersRequired && !anyLetter && !self.contains { $0.isUppercase } { return false }
return true
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment