カレッヂ |
質問者 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裏技 |