CGI-BBS > 電子掲示板 > 簡易BBS > メールアドレスの正規表現


カレッヂ
カレッヂ


質問者 hummingam  投稿日 4/17(火) 13:15:30
皆さん、こんにちは

フォーム入力されたデータをチェックする正規表現を
作りたいと思ってレスキュー裏技さんのスクリプトを
参考にしたのですが、意味がよく分かりません。
初歩的な質問ですが、よろしくお願いします。
環境は、win32,activeperlです。

if (!($EMAIL =~ /\b[-\w.]+@[-\w.]+\.[-\w]+\b/)) {
      print "Emailの入力に誤りがあります。\n";
      exit;
   }

この正規表現は、メールアドレスの境界に一致する、
(-記号、単語構成文字、改行以外の任意の一文字)のいずれか + @ +
(-記号、単語構成文字、改行以外の任意の一文字)のいずれか + . +
(-記号、単語構成文字、改行以外の任意の一文字)のいずれか、と
解釈しました。。。

テストしてみると、
-@-.-は、エラーになり、-a@-a.-aでは、うまくいきました。
回答者 LLO  [削除]  投稿日 4/17(火) 18:09:14
こんにちは。
\w = 単語構成文字(通常英数字)
だから記号(-@-.-)ではエラーがでるのではないでしょうか
(-a@-a.-a)は英数字が入っているのでうまくいく。
質問者 hummingam  [削除]  投稿日 4/17(火) 20:10:19
LLOさん、こんにちは

レス、ありがとうございました。m(__)m
まだ、ちょっとよく分かりませんので、ご教示ください。

> \w = 単語構成文字(通常英数字)
> だから記号(-@-.-)ではエラーがでるのではないでしょうか

$EMAIL =~ /\b[-\w.]+@[-\w.]+\.[-\w]+\b/;のスクリプトで、
[-\w.]の部分は、
1 ハイフン、または、
2 単語構成文字、または、
3 改行以外の任意の1文字
と理解してもよいのでしょうか。

よろしくお願いします。
回答者 呑兵衛  [削除]  投稿日 4/18(水) 12:11:36
呑兵衛と言います。

> $EMAIL =~ /\b[-\w.]+@[-\w.]+\.[-\w]+\b/;のスクリプトで、
> [-\w.]の部分は、
> 1 ハイフン、または、
> 2 単語構成文字、または、
> 3 改行以外の任意の1文字
> と理解してもよいのでしょうか。

3が違います。[ ] の中で意味を持つメタキャラクターは
^  と  -  だけです。
[.] は .(ドット) として扱われます。

\b    境界があって、
[-\w.]+ - か英数文字か . が連続して
@     @があって
[-\w.]+ - か英数文字か . が連続して
\.    . があって
[-\w]+  - か英数文字が連続して
\b    境界があっておしまし
という風にperlは解釈します。
質問者 hummingam  [削除]  投稿日 4/18(水) 13:59:40
呑兵衛さん、こんにちは

レス、ありがとうございました。m(__)m
よく分かりました。

> 3が違います。[ ] の中で意味を持つメタキャラクターは
> ^  と  -  だけです。
> [.] は .(ドット) として扱われます。

テストをしてみましたので、結果を報告しておきます。
-@-.- エラー
.@... エラー
--@--.-- エラー
..@..... エラー
a@a.a OK
-a@-a.-a OK
.a@.a..a OK
でした。

返信(回答)する


Web裏技