Ruby/Development/Utility Regexps

Материал из Wiki.crossplatform.ru

Перейти к: навигация, поиск

Checking a Credit Card Checksum

module CreditCard
  def creditcard?
    numbers = self.to_s.gsub(/[^\d]+/, "").split(//)
    checksum = 0
    0.upto numbers.length do |i|
      weight = numbers[-1*(i+2)].to_i * (2 - (i%2))
      checksum += weight % 9
    end
    return numbers[-1].to_i == 10 - checksum % 10
  end
end
class String
  include CreditCard
end
class Integer
  include CreditCard
end
 
puts "1111 1111 6542 1319".creditcard?                  
puts "1111111111111313".creditcard?



Validate an email address

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.ru"                # => true
probably_valid? "joe@examplecom"                 # => false



Validate an email address with Resolv::DNS

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
valid_email_host?("j@l.m")       # => false
valid_email_host?("joe@oreilly.ru")          # => true