• 締切済み

PHPでメールチェックをしたいのですが、空欄だとエラーが返されてしまいます。

必須項目ではないので、何か入力されたときのみメールチェックをしたいのですが、 function isMailError ( $mail ) { if($mail==null) { return true; } if ( !preg_match( '/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i', $mail ) ){ return true; } else { return false; } } この設定ではうまくいきません。なぜでしょうか? ご指導よろしくお願い致します。

みんなの回答

  • think49
  • ベストアンサー率59% (285/482)
回答No.4

あ、ひょっとして、エラーがある場合に falseでしょうか。 その場合は No.3 は true を false に読み替えてください。 失礼しました。

  • think49
  • ベストアンサー率59% (285/482)
回答No.3

> if ( !preg_match( '/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i', $mail ) ){ ! は条件を反転させますので、正しいメールアドレスが入力され「なかった」場合に true を返してしまいます。 PHP: 論理演算子 - Manual http://php.benscom.com/manual/ja/language.operators.logical.php 下記コードで期待通りの結果を確認しました。 <?php function isMailError ($mail) { if (preg_match( '/^[\w.\-+]+@(?:[\w\-]+\.)+[a-z]{2,6}$|^$/i', $mail ) ){ return true; } else { return false; } } header('Content-Type: text/plain; charset=UTF-8'); // Content-Typeヘッダ出力 $mail = ''; echo "mail= \"".$mail."\"\n"; echo "return \"".isMailError($mail)."\"\n"; $mail = 'test@test.com'; echo "mail= \"".$mail."\"\n"; echo "return \"".isMailError($mail)."\"\n"; ?>

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

こんな感じでどうでしょ? function isMailError ( $mail=null ) { if($mail==="" or is_null($mail)) return false; if ( !preg_match( '/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i', $mail ) ){ return true; } else { return false; } }

  • tongoko
  • ベストアンサー率87% (7/8)
回答No.1

if($mail==null) { return true; } が if($mail==null) { return false; } でした。 前のスレッドで聞いて下さいね。