- ベストアンサー
携帯用メールフォームのcgiのメールアドレス分割を修正する方法
- 携帯用メールフォームのcgiのメールアドレス分割を修正する方法について教えてください。
- 現在、携帯用メールフォームのcgiでは、メールアドレスが@で分割されてしまっています。この問題を解決するために、ソースコードを修正する方法を教えてください。
- メールアドレスが@で分割されずに記入できるようにするには、携帯用メールフォームのcgiのソースコードを修正する必要があります。具体的な修正方法について教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
最後に記述した規則表現では携帯以外のメール アドレスは通らないので、その前のものについてでしょうか。そうでないとしたら、それ以外の部分に何か誤りがあると思います。 > 送信元アドレスと入力アドレスが一致するcgiチェックの方法はありますでしょうか 環境変数の REMOTE_HOST を参照することによって可能ですが、HTML ファイルと CGI スクリプトの双方の全部を見ないと、上の点も含めて、こちらで解決することはできません。
その他の回答 (4)
- kyofu-chan
- ベストアンサー率23% (109/464)
規則表現でチェックする場合です: my $regex ="[^@]+@(?:docomo|mopera|[dhtrcknsq]\.vodafone|ezweb)\.ne\.jp"; if ($str =~ /^$regex$/) { きちんと働くか否か (エラーとならないか、先に挙げたドメインで通るか、それ以外で通らないかなど) を確認してください。
お礼
有難うございます! 早速試してみました。 きちんと働きましたッ!! 先に挙げたドメインでも通りましたが、 yahoo.co.jpでも通りました・・・ でたらめなアドレスでも通りました・・・ 基本的に携帯サイトから携帯メールで使用するフォームなので 正規表現が必要であれば下記のものなのですが、 第一に送信元アドレスとフォーム記入のアドレスが一致していれば送信できて、 一致していなければエラーが出るようになれば理想です。(いたずらが多いので・・・) 特に携帯のみのドメインにこだわってはおりません。 何度も申し訳ないですが、よろしくお願いしますm(_ _)m
補足
御礼と補足と書いた順番が逆なのですが、 ええと、@で区切った方が本当は使い勝手が良いのですが 私のサイトの場合、それぞれの方が携帯アドレスを自作定型文で保存していてコピペ入力する方の方が多いんですね。 同じ方が何度もリピーターとして利用されます。 2~300人ほどです。 なので、@で区切らない方が返って使い勝手が良かったりします。 @で区切らず、いたずら防止で送信元アドレスと入力アドレスが一致するcgiチェックの方法はありますでしょうか。 本当にすみません、よろしくお願いします。
- kyofu-chan
- ベストアンサー率23% (109/464)
SELECT エレメントをなくしたいということのようですが、逆に、先に挙げられたようにドメインが限られている場合は、それらをすべて SELECT に書き込んだほうがよいですよ。というのは、ユーザの視点に立てば、タイピングよりリストから選択するほうが楽だという人が多いからです (タイピング間違いもない)。 それでも CGI チェックのほうがよいという場合は、そのような記述を載せます。上の方法でよいというなら、現在の SELECT の部分を掲載いただいたら修正します (あるいは、ご自身で可能でしょうか)。
- kyofu-chan
- ベストアンサー率23% (109/464)
こんんちは。 もう一つ確認なのですが、新判定では、メールの @ よりうしろは携帯電話のキャリアのものではなくて、どんなものでもよいということでしょうか。 そうであるという前提で、アドレス チェック規則[正規]表現を挙げておきます: $regex = q{(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\} . q{\[\]\000-\037\x80-\xff])|"[^\\\\\x80-\xff\n\015"]*(?:\\\\[^\x80-\xff][} . q{^\\\\\x80-\xff\n\015"]*)*")(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x} . q{80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff])|"[^\\\\\x80-} . q{\xff\n\015"]*(?:\\\\[^\x80-\xff][^\\\\\x80-\xff\n\015"]*)*"))*@(?:[^(} . q{\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\\\[\]\0} . q{00-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[^\x80-\xff])*} . q{\])(?:\.(?:[^(\040)<>@,;:".\\\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,} . q{;:".\\\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\\\x80-\xff\n\015\[\]]|\\\\[} . q{^\x80-\xff])*\]))*}; これとてどこかからのパクリだったと記憶していますが... 厳密にはそのドメイン、ならびにそのアカウントが現に存在するということまで確認しなければいけませんが、現実的ではないので、この程度でいかがでしょう。
補足
こんにちは^^ 有難うございますm(_ _)m 正規表というのが必要なのですね。 大変勉強になります。 @の後ろは基本的に携帯のものだけで構わないです。挙げますと、 docomo.ne.jp mopera.ne.jp (←コレ何だろう??) d.vodafone.ne.jp h.vodafone.ne.jp t.vodafone.ne.jp r.vodafone.ne.jp c.vodafone.ne.jp k.vodafone.ne.jp n.vodafone.ne.jp s.vodafone.ne.jp q.vodafone.ne.jp ezweb.ne.jp この程度(docomo,au,vodafone)です。 教えて頂いたソースを my $regex ="^[^@]+@[^.]+\..+"; この辺りに貼り付けすれば良いのでしょうか? 他に変更すべきところはありますでしょうか? 改造は初めてです。 ソースは雰囲気しかわからないでおります。 このフォームだけどうしても急がなければならないので、 調べるも素人すぎて歯が立たないですorz これから少しづつ勉強していきますので・・・ よろしくお願いします!
- kyofu-chan
- ベストアンサー率23% (109/464)
・ページの HTML のほうの記述の変更も必要です ・Perl のソース コードのこれ以前の部分が必要です
補足
有難うございます、補足させていただきます。 Perlのこれ以前のソースは ---ここから-- #必須入力チェック if($FORM{'goiken'} eq "" ) { &err1('必須入力項目に記入漏れがあります。お手数ですが、前の画面に戻って入力しなおしてください。'); } if($hensin eq "1" ) { if($mail eq "" ) { &err1('メールアドレスが入力されていません。お手数ですが、前の画面に戻って入力しなおしてください。'); } } #メールアドレスのチェック ---質問箇所に続く-- です。 HTMLの変更はselect部分をなくして、 --ここから-- <font color=#993333>メールアドレス</font><br> <input type="text" size="13" name="mail">@<br> --ここまで-- これで(@以降はselectだったので、この@<br>消去で)OKかと思うのですが浅いでしょうか・・・。 よろしくお願いします!
お礼
色々教えてくださって有難うございました。 素人なりにREMOTE_HOSTを調べてみましたが、大変そうですorz 質問させて頂いてからずーーーーーーッとソースと睨めっこしてきましたが、 なんとなくちょっとだけ気のせいかもしれないレベルで理解できてきました。 他のフォームcgiと見比べたりして、切ったり貼ったりして色々とやってみたいと思います。 @で区切って一からやり直したら、教えて頂いた通り上手くいきました。 本当に有難うございましたm(_ _)m また質問を見かけたらお願いします^^;