Skip to content

Instantly share code, notes, and snippets.

@mattvanhorn
Created April 21, 2015 16:00
Show Gist options
  • Save mattvanhorn/18f51e8bc5fd50addb70 to your computer and use it in GitHub Desktop.
Save mattvanhorn/18f51e8bc5fd50addb70 to your computer and use it in GitHub Desktop.
Regex for RFC2822 validation
EmailAddress = begin
qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'
dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]'
atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-' +
'\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+'
quoted_pair = '\\x5c[\\x00-\\x7f]'
domain_literal = "\\x5b(?:#{dtext}|#{quoted_pair})*\\x5d"
quoted_string = "\\x22(?:#{qtext}|#{quoted_pair})*\\x22"
domain_ref = atom
sub_domain = "(?:#{domain_ref}|#{domain_literal})"
word = "(?:#{atom}|#{quoted_string})"
domain = "#{sub_domain}(?:\\x2e#{sub_domain})*"
local_part = "#{word}(?:\\x2e#{word})*"
addr_spec = "#{local_part}\\x40#{domain}"
pattern = Regexp.new "\\A#{addr_spec}\\z", nil, 'n'
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment