perlの正規表現でメールアドレスをチェックするには?

[上に] [前に] [次に]
1999/06/15(火) 19:37:13
$emailがメールアドレスかどうかを調べたいのです。
完璧にできないのは分かってます。
でも、必要最低限のチェックを行うにはどのような条件式を書けばよいでしょうか?

ふじ 1999/06/15(火) 19:51:39
半角英数字 @ . _ -
以外の文字が含まれていて、かつ @ が含まれていなければ、アウト。

#他にメールアドレスに使ってよい文字って、あったかなあ・・・?

じぇい 1999/06/15(火) 21:13:13
>半角英数字 @ . _ -
>以外の文字が含まれていて、かつ @ が含まれていなければ、ア
>ウト。
確か、、丸括弧の中にコメントが含まれている場合もあったような気が、、。

前にとある本で読んだのですが、電子メールの文法が正しいかどうか評価するには、かなり複雑な正規表現になったとおもいます。(単独の正規表現では不可能)、、、確か、、軽く1000文字は超えるくらいの、、。

だから、、@が含まれるかどうかの検査が限界だと思いますが、、。

B-Cus 1999/06/15(火) 23:31:44
> #他にメールアドレスに使ってよい文字って、あったかなあ・・・?
いっぱい。~!#$%^&*+;:"'?/| あたりは、結構使えたはずです
(全部本当に使えるかどうかは調べてません)。

> 電子メールの文法が正しいかどうか評価するには、かなり複雑な正規表現に
> なったとおもいます。
なんでかというと、コメントのネスト(入れ子ね)を許しているからです。
そんな変な規格作るなよ〜と思いますが、そうなっちゃったものは仕方がない。
 RFC822 - http://www2.umin.u-tokyo.ac.jp/internet/rfc/rfc822.txt

ただ現実的には、ふじさんのおっしゃるようなチェックで問題ないでしょう。

# あれ、これってメールのFrom行を調べる話でしたっけ?
# メールアドレス自体は正規表現で書けるのかな? 求む情報。

やま 1999/06/16(水) 02:47:47
便乗質問ですが、メールチェックに、
if ($mail =~ /[^\x21-\x7E]/ || $mail =~ /[\(\)<>,;:\\"\[\]]/ || $mail !~ /^[^@]+@[^@]+$/) { ダメ }
を使っていますが、問題ありますか?
これだけは、複雑すぎていつまで経っても確信できません。

B-Cus 1999/06/16(水) 06:19:30
> $mail =~ /[\(\)<>,;:\\"\[\]]/
FreeBSD+sendmial8.8.8で試してみた限りでは、;[]はOK、他はダメでした。

ただし、/etc/aliasesに書いて、mailコマンド(いわゆるucbmail?)で送ったので、
mailコマンドがヘボいのかもしれないし、/etc/aliases での書き方次第では
いけるかもしれませんが、深くは追求しませんでした。

[上に] [前に] [次に]