メールアドレスの書式かチェックする - Perl

メールアドレスがきちんと入力されているかチェックを行いたい。半角英数字と一部の記号を用い、「ユーザー名@ドメイン名」といった形になっているか確認する。

サンプル

;#
;#入力チェック
;#

if( isMailAddress('m.ka-tsu-be@ichikoro.com') ){
  print "メールアドレスです。\n";
}
else{
  print "メールアドレスではありません。\n";
}


#---------------------------------------
#メールアドレスかチェックする
#---------------------------------------
sub isMailAddress{
  my $str = shift || return(undef);

  #-- メールアドレスか --#
  if( $str =~ /^([a-zA-Z0-9\.\-\/_]{1,})@([a-zA-Z0-9\.\-\/_]{1,})\.([a-zA-Z0-9\.\-\/_]{1,})$/ ){
    return(1);
  }
  #-- メールアドレスではないか --#
  else{
    return(0);
  }
}

ここでは非常に簡便な方法を使用している。 もしも、もっと厳格にチェックしたいのなら、「([a-zA-Z0-9\.\-\/_]{1,})@([a-zA-Z0-9\.\-\/_]{1,})\.([a-zA-Z0-9\.\-\/_]{1,})」の部分をPerlメモの大崎氏が書かれている次のような正規表現に置き換えれば良い。 www.din.or.jp

$mail_regex = q{(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\} . q{\[\]\000-\037\x80-\xff])|"[^\\\\\x80-\xff\n\015"]*(?:\\\\[^\x80-\xff][} . q{^\\\\\x80-\xff\n\015"]*)*")(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x} . q{80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff])|"[^\\\\\x80-} . q{\xff\n\015"]*(?:\\\\[^\x80-\xff][^\\\\\x80-\xff\n\015"]*)*"))*@(?:[^(} . q{\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\0} . q{00-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[^\x80-\xff])*} . q{\])(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,} . q{;:".\\\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[} . q{^\x80-\xff])*\]))*};

このチェックもあくまで書式のチェックであり、実在するメールアドレスかどうかのチェックではない。また正常に届くかどうかのチェックを行っているわけではないので注意されたい。