必須項目ではないので、何か入力されたときのみメールチェックをしたいのですが、

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;
}
}


この設定ではうまくいきません。なぜでしょうか?
ご指導よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

あ、ひょっとして、エラーがある場合に falseでしょうか。


その場合は No.3 は true を false に読み替えてください。
失礼しました。
    • good
    • 0

> 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.operat …

下記コードで期待通りの結果を確認しました。

<?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";
?>
    • good
    • 0

こんな感じでどうでしょ?



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;
}
}
    • good
    • 0

if($mail==null)


{
return true;
}


if($mail==null)
{
return false;
}

でした。
前のスレッドで聞いて下さいね。
    • good
    • 0

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


人気Q&Aランキング