- 締切済み
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; } } この設定ではうまくいきません。なぜでしょうか? ご指導よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- think49
- ベストアンサー率59% (285/482)
あ、ひょっとして、エラーがある場合に falseでしょうか。 その場合は No.3 は true を false に読み替えてください。 失礼しました。
- think49
- ベストアンサー率59% (285/482)
> 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)
こんな感じでどうでしょ? 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)
if($mail==null) { return true; } が if($mail==null) { return false; } でした。 前のスレッドで聞いて下さいね。