Skip to content

Instantly share code, notes, and snippets.

@lu4nm3
Created May 16, 2020 20:11
Show Gist options
  • Save lu4nm3/744829df265063766678b89294809698 to your computer and use it in GitHub Desktop.
Save lu4nm3/744829df265063766678b89294809698 to your computer and use it in GitHub Desktop.
object EmailAddress {
// Regex that captures the "official" format standard (RFC 5322) that email addresses must adhere to
private val 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])+)\])""".r
private def isValidAddress(emailAddress: String): Boolean = {
EmailRegex.findAllMatchIn(emailAddress).length == 1
}
def apply(emailAddress: String): EmailAddress = {
require(isValidAddress(emailAddress), "Invalid email address")
new EmailAddress(emailAddress)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment