電子書籍の厳選無料作品が豊富!

ホームページのメールフォームを作ってます。
返信用メールアドレスを記入してもらうフォームで、
携帯アドレスがエラー扱いになってしまいます。

if (trim($email) == '') {
$error[] = 'メールアドレスは必須項目です。';
} else {
$pattern =
'/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/iD';
if (!preg_match($pattern, $email)) {
$error[] = 'メールアドレスの形式が正しくありません。';
}
}

という感で、yahooやgmailを入れたときには上手くいくのですが、
自分のドコモの携帯のアドレスを入れると上手くいきません。

買った本を写して書いてる感じなので、どう直していいかわかりません。

教えてください!!

A 回答 (3件)

aaaa_aaaaaaaa@docomo.ne.jp でならそのコード正常に動作しますけど。


フォームの方でinputにsize設定してデータが切り取られたりしてませんか?
phpの方で受け取った$emailをechoするなりして確認してみてください。

echo 'Email: '. $email;
if (trim($email) == '') {
$error[] = 'メールアドレスは必須項目です。';
} else {
$pattern =
'/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/iD';
if (!preg_match($pattern, $email)) {
$error[] = 'メールアドレスの形式が正しくありません。';
}
}
    • good
    • 0

こんにちは。



ドコモのメールアドレスは特殊で通常は許されないxxx...xxx..xx@docomo.ne.jpという、ドットの連続が使用できています。
それにひっかかっているのだと思います。

この回答への補足

メール前半に.は使っていません。
aaaa_aaaaaaaa@docomo.ne.jpというような形です。

補足日時:2012/11/17 16:47
    • good
    • 0

正規表現を少し勉強しましょう。



/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/iD
これは
・ 最初は 英数字 + _ - が1個以上
・その後に「. の後に 英数字 + _ - が1個以上」のパターンが0個以上
・@ が続く
・「英数字 - が1個以上続いた後に . 」が1個以上続く
・英数字 2~6個で終わる
・大文字小文字は無視
という意味です。

ドコモのアドレスだと、 docomo.ne.jp で、@以降は上記の条件にマッチしています。
・「英数字 - が1個以上続いた後に . 」が1個以上続く
→「docomo.」「ne.」
・英数字 2~6個で終わる
→「jp」で終わり

となると、前半の部分がこのパターンとマッチしないことになります。
英数字 + _ - 以外で始まっている
英数字 + _ - . 以外の文字が使われている
. が2つ以上続いている
等はないでしょうか?

直し方はそれ次第です。

この回答への補足

携帯のアドレスは英語4つの後にアンダーバー、その後に英語が七つ、
(最初は 英数字 + _ - が1個以上)aaaa_aaaaaaaa@docomo.ne.jpなので条件を満たしてると思います。

補足日時:2012/11/17 16:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!