Skip to content

Instantly share code, notes, and snippets.

@microwaves
Created August 22, 2011 22:13
Show Gist options
  • Save microwaves/1163773 to your computer and use it in GitHub Desktop.
Save microwaves/1163773 to your computer and use it in GitHub Desktop.
“foo@bar.com”.match /^([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})$/i
#
# RFC822 Email Address Regex
# --------------------------
#
# Originally written by Cal Henderson
# c.f. http://iamcal.com/publish/articles/php/parsing_email/
#
# Translated to Ruby by Tim Fletcher, with changes suggested by Dan Kubb.
#
# Licensed under a Creative Commons Attribution-ShareAlike 2.5 License
# http://creativecommons.org/licenses/by-sa/2.5/
#
module RFC822
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 = /A#{addr_spec}z/
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment