メールアドレスチェック

では、以上のことをふまえて、メールアドレスのチェックをしてみましょう。
今回は、携帯を含むことにします。

携帯を含まない場合は、Perlメモ
を使うとほぼ完璧なメールチェックができると思います。

まず、携帯で許可されているアドレスはというと、

  .(ドット)は最初と最後は使用不可
  .(ドット)は連続使用不可
  アドレスの最初に数字の0は使用不可

  アドレスの先頭は英語のみ

  1文字目は英字

つまり、Docomoがかなり緩いアドレスなので、Docomoにあわせることになります。
となると、3社に共通しているのは、「アドレスの頭に数字はダメ!」
ということですね。
でも、PCは「アドレスの頭に数字OK」な訳ですから、
結局のところ、

「@マークを挟んで前後に1文字以上の英数字、
ー(ハイフン).(ドット)_(アンダースコア)があって、
@の後ろに1文字以上の.(ドット)があって、
それ以外に1文字以上の英数字ー(ハイフン).(ドット)_(アンダースコア)
があるメールアドレス」

ということになります。

ここでは、OKが1、NGが0、空白の場合は2が返るようにします。

まず、メールアドレスの欄が空白だった場合の処理(2)

my($str) = @_;	#チェックする文字
my $result = 1; #何もチェックにかからなければ1を返す

if($str eq ''){
    $result = 2;
} else {
#ここに、空白じゃなかった場合の処理
.....

これで空白だったら、2を返すという処理ができました。
続いて、空白じゃなかった場合。

unless($str =~ /^[0-9a-zA-Z\_\.\-]+@[^.]+\..+/){
	$result = 0;

「^[0-9a-zA-Z\_\.\-]」 文字列の最初に英数字、アンダースコア、ドット、ハイフン
があって、

「+@[^.]+\..+/」
次に@がきて、その後はドットじゃないものがきて、さらにドットが1個以上ある
アドレスに、

「unless」
マッチしなかったら、

$result = 0;
} else {
$result = 1;
}

0(NG)を返す、それ以外だったら1(OK)を返す

という感じです。

あとは、サブルーチンを呼び出す部分で、
2の場合、1の場合という風に分岐をつくってやればいいです。