今日のお題...
Perlでメールアドレスチェック...
Perlには、正規表現ってのがつかえるとな。
ふむふむ。と説明を読む。
で、結構難しい物なので、
とりあえず、ぱくってみた。
もっと難しいのも有ったのだが、
自分にはちょっと.....
あんまり訳が分からないものは使えません。(^^;)
簡単な例
 if ( $ml =~ /^[^@]+@[^.]+¥..+/ )
 {
  正常;
 }
 else{
  異常;
 }
で、実験。
(実験の環境はWindows2000+IIS+ActivePerl5.8
 IISのバージョンってどうやってみるの?)
①「sendai@sirou.jp」正常 普通のやつ
②「仙台@四郎.jp」正常 漢字入り
③「sendaisirou.jp」異常 @が無い
④「sendaisirou.jp@」異常 @が一番後
⑤「@sendaisirou.jp」異常 @が先頭
⑥「sendai@sior@ou.jp」正常 @が二つ
⑦「sendai@jp」異常 ドメイン部分の.が一つ
うーん
①③④⑤⑦は良いけどネ。
②と⑥はちょっとね。仙台@四郎.jpはあんまりだろう。@ふたっつってのもネ。
②は全角系の処理がうまく行っていないように見える。
そこで、全角チェックを入れてあげた。
⑥は@の数を数えてあげた。
で、完成はこちら
!===========ここから=================
if ( IsMailAddress( $mail ) )
{
  正常
}
else{
  異常
}
sub IsMailAddress
{
  local($ml) = @_;
  $result = 1;
  if ( $ml =~ /^[^@]+@[^.]+¥..+/ )
  {
    ;
  }
  else{
    $result = 0;
  }
  #全角チェック
  $AtmarkCounter = 0;
  for ($i = 0; $i < length($_[0] ); $i++) {
    $c = substr($_[0] , $i, 1);
    if ($c =~ /[¥x80-¥xff]/)
    {
      #全角
      $result = 0;
    }
    if ($c eq "@")
    {
      $AtmarkCounter++;
    }
  }
  #@はひとつだけであること
  if($AtmarkCounter != 1){
    $result = 0;
  }
  return ($result);
}
!===========ここまで=================
ちゃんとエラーチェック出来るようになった。
年明けはこんな感じでスロースタートです。