Rubyでメールアドレスの検証

thumbnail for this post

ブログの引っ越しついでに、昔書いた記事で人気のあったものを。。

手抜きじゃないの?

Rubyでメールアドレスの検証を行う方法です! サンプルコードのみなので、内容はコードを読んでみてください!

手抜きじゃないの?

require 'resolv'
require 'pp'

class MailAddressValidator
  def self.validate(address)
    return validate_by_regex(address) && validate_by_MX(address)
  end
  def self.validate_by_regex(address)
    addr_spec = %r{^(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+))*)|(?:"(?:\\[^\r\n]|[^\\"])*")))\@(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+))*)|(?:\[(?:\\\S|[\x21-\x5a\x5e-\x7e])*\])))$}
    address =~addr_spec
  end
  def self.validate_by_MX(address)
      mxdomain = address[/[^@]+$/]
      Resolv::DNS.new.getresource(mxdomain,Resolv::DNS::Resource::IN::MX) rescue nil
  end
  private_class_method :validate_by_regex, :validate_by_MX
end
使うときはこんな感じ
require File.dirname(__FILE__) + '/mail_address_validator'
print (MailAddressValidator.validate('hogefuga@hogefugadennnenn.naiyo')) 'ok':'ng' #=> ng

実際はcgi化してjavascriptから呼んでる

function validateMailAddress(addr_string){
  var req = getXmlHttpRequest();
  req.open('GET',"mail_address_validator.cgi?addr=" + addr_string, false);
  req.send(null);
  resultText = req.responseText;
  if(resultText != "ok"){
    return false;
  }
  return true;
}

投げ銭していただける場合は、amazonで15円からできます。宛先はheisakuあっとcomichi.comで。

マイナスは入れられないの?

comments powered by Disqus