This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
Validating an Email Address | ||
---|---|---|
Code | Expected | Actual |
test_addresses = [ #The following are valid addresses according to RFC822. 'joe@example.com', 'joe.bloggs@mail.example.com', 'joe+ruby-mail@example.com', 'joe(and-mary)@example.museum', 'joe@localhost', 'joe', 'joe@', '@example.com', 'joe@example@example.com', 'joe and mary@example.com' ] valid = '[^ @]+' # Exclude characters always invalid in email addresses username_and_machine = /^#{valid}@#{valid}$/ test_addresses.collect { |i| i =~ username_and_machine } |
[0, 0, 0, 0, 0, nil, nil, nil, nil, nil] | [0, 0, 0, 0, 0, nil, nil, nil, nil, nil] |
username_and_machine_with_tld = /^#{valid}@#{valid}\.#{valid}$/ test_addresses.collect { |i| i =~ username_and_machine_with_tld } |
[0, 0, 0, 0, nil, nil, nil, nil, nil, nil] | [0, 0, 0, 0, nil, nil, nil, nil, nil, nil] |
def probably_valid?(email) valid = '[A-Za-z\d.+-]+' #Commonly encountered email address characters (email =~ /#{valid}@#{valid}\.#{valid}/) == 0 end #These give the correct result. probably_valid? 'joe@example.com' |
true | true |
probably_valid? 'joe+ruby-mail@example.com' |
true | true |
probably_valid? 'joe.bloggs@mail.example.com' |
true | true |
probably_valid? 'joe@examplecom' |
false | false |
probably_valid? 'joe+ruby-mail@example.com' |
true | true |
probably_valid? 'joe@localhost' |
false | false |
probably_valid? 'joe(and-mary)@example.museum' |
false | false |
probably_valid? 'joe@example.cpm' |
true | true |
require 'resolv' def valid_email_host?(email) hostname = email[(email =~ /@/)+1..email.length] valid = true begin Resolv::DNS.new.getresource(hostname, Resolv::DNS::Resource::IN::MX) rescue Resolv::ResolvError valid = false end return valid end #example.com is a real domain, but it won't accept mail valid_email_host?('joe@example.com') |
false | false |
#lcqkxjvoem.mil is not a real domain. valid_email_host?('joe@lcqkxjvoem.mil') |
false | false |
#oreilly.com exists and accepts mail, though there might not be a 'joe' there. valid_email_host?('joe@oreilly.com') |
true | true |