How can we select only the elements in an array that match a given regex?
valid_email = /.+@.+\..+/
possible_emails = [
  "user@example.com",
  "person@thing",
  "ben@upcase.com",
  "user@place.it",
  "asdf"
]
<your code here, using valid_email>
#=> [
#     "user@example.com",
#     "ben@upcase.com",
#     "user@place.it"
#   ]
  As luck would have it, Array has a #grep method which compares each
element in the array to a pattern and returns only elements that match the
pattern:
valid_email = /.+@.+\..+/
possible_emails = [
  "user@example.com",
  "person@thing",
  "ben@upcase.com",
  "user@place.it",
  "asdf"
]
possible_emails.grep(valid_email)
#=> [
#     "user@example.com",
#     "ben@upcase.com",
#     "user@place.it"
#   ]
Note: Array#grep is essentially a shorthand for:
possible_emails.filter do |email|
  email =~ pattern
end
Final Note: The above pattern for a "valid email address" is very simplistic and only asserts "one or more characters, then an @ symbol, one or more characters, a literal '.', one or more characters." While simple, the [official version][] is unreasonably complex and I prefer to use the above to avoid false negatives.
[official version]: http://www.regular-expressions.info/email.html
Return to Flashcard Results