• ベストアンサー

PHP技術者認定試験について

#address=<<_MEMBER <pre> Name Addr Mail Ito Tokyo ito@apple.example.com </pre> _MEMBER_; print preg_replace('/[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}/', [delete]' $address); 出力されるものは Name Addr Mail Ito Tokyo [delete] だそうですが、どうしてそうなるのですか? [^@\s] と -a-z の意味がわかりません。 -a-zはa-z とは違うのですか? Name Addr Mail Ito Tokyo ito[delete] ではないのですか?

  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

>[^@\s] と -a-z の意味がわかりません。 >-a-zはa-z とは違うのですか? [^@\s] は、「"@" と空白文字以外の文字」 です。空白文字=半角空白、タブ、改行等 [-a-z] は、「"-"または"a"または"b"または"c"または(中略)または"z"」 です。 [a-z] は、「"a"または"b"または"c"または(中略)または"z"」 です。

関連するQ&A

  • ['SERVER_NAME']と正規表現について

    下記の意味が分かりません。 ( !empty($_SERVER['SERVER_NAME']) && preg_match('#^(?:[a-z0-9\-]+\.){1,}[a-z]{2,}$#i', $_SERVER['SERVER_NAME']) ) ? preg_replace('#^www\.#', '.', $_SERVER['SERVER_NAME']) : ''; <分かる範囲> $_SERVER['SERVER_NAME']が空ではなく、かつ、$_SERVER['SERVER_NAME']の中に'#^(?:[a-z0-9\-]+\.){1,}[a-z]{2,}$#i'があったら、$_SERVER['SERVER_NAME']の中の'#^www\.#'を'.'へ置き換え <知りたいこと> 正規表現の所の意味と、結局、この一文で何をしようとしている(と予想される)か、教えてください

    • ベストアンサー
    • PHP
  • php初心者ですメールについて教えてください。

    ホームページのメールフォームを作ってます。 返信用メールアドレスを記入してもらうフォームで、 携帯アドレスがエラー扱いになってしまいます。 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を入れたときには上手くいくのですが、 自分のドコモの携帯のアドレスを入れると上手くいきません。 買った本を写して書いてる感じなので、どう直していいかわかりません。 教えてください!!

    • 締切済み
    • PHP
  • phpからのメール送信

    サーバにはpostfix/phpがインストールされており mb_send_mail関数を使ってメールを送信しております。 example.comというドメインを例として説明すると fromがtest@example.comというメールアドレスでは問題なく送ることができるのですが、 ドメインをexample.com→mail.example.comと変更し、test@mail.example.comというアドレスで送ろうとすると maillog上はtest@mail.example.comから送っていることになっているのですが、 メーラーで受信するとformがtest@example.comになっております。 サブドメインのmail.example.comから送るようにするにはどのようにしたらよろしいでしょうか? main.cf virtual_alias_domains=example.com mail.example.com virtual_alias_maps = hash:/etc/mail/virtual /etc/mail/virtual test@example.com test test@mail.example.com test

  • PHPで拒否型を許可型に変更したい

    写メールBBSというPHPがあります。 http://php.s3.to/bbs/bbs7.php これは、特定のメールアドレスに届いたメールについて、「PHP上のボータンをクリックすると、メールサーバーからメールをダウンロードし、data.cgiに書き込む」というものです。このPHPでは、不正メールや広告メールを書き込まないように、拒否アドレスを設定できるようになっています。 ****************************************** 【config.php】 //拒否アドレス $deny_from = array('yahoo.co.jp'); 【pop.php】 // 送信者アドレスの抽出 if (preg_match("/\nFrom:[ \t]*([^\r\n]+)/i", $head, $freg)) { $from = addr_search($freg[1]); } elseif (preg_match("/\nReply-To:[ \t]*([^\r\n]+)/i", $head, $freg)) { $from = addr_search($freg[1]); } elseif (preg_match("/\nReturn-Path:[ \t]*([^\r\n]+)/i", $head, $freg)) { $from = addr_search($freg[1]); } // 拒否アドレス foreach ($deny_from as $dfrom) { if (stristr($from, $dfrom)) $write = false; } ****************************************** やりたいこと。 拒否アドレスを設定するのではなく、許可アドレス型とし、特定メールアドレス以外は全て書き込まないようにしたいと考えています。 そこで下記のように修正しましたが、全てのメールで書き込めてしまいます。 ご指導いただけましたら幸いです。 よろしくお願いいたします。 ****************************************** 【config.php】 //許可アドレス $allow_from = array('hoge.co.jp'); 【pop.php】 // 送信者アドレスの抽出 if (preg_match("/\nFrom:[ \t]*([^\r\n]+)/i", $head, $freg)) { $from = addr_search($freg[1]); } elseif (preg_match("/\nReply-To:[ \t]*([^\r\n]+)/i", $head, $freg)) { $from = addr_search($freg[1]); } elseif (preg_match("/\nReturn-Path:[ \t]*([^\r\n]+)/i", $head, $freg)) { $from = addr_search($freg[1]); } // 許可アドレス foreach ($allow_from as $afrom) { if (stristr($from, $afrom)) { $write = true; } else { $write = false; } } 結果、許可アドレス以外の書き込みが出来てしまう。

    • ベストアンサー
    • PHP
  • IPアドレス拒否処理の正規表現とstr_repla

    下記のようなサンプル(の一部)があるのですが、IF文の条件式の意味が分かりません。 while ( $out = $db->fetch_result($result) ) {  $out['ip_addr'] = stripslashes($out['ip_addr']);  if ( !$ip_banned && preg_match('#^'.str_replace(array('\*', '\?'), array('[0-9]*', '[0-9]'), preg_quote($out['ip_addr'])).'$#', $ip_addr) )  $ip_banned = true; 分解してみました。 ・if ( A ) ・A … !$ip_banned && B ・B … preg_match('#^'.C.'$#', $ip_addr) ・C … str_replace(array('\*', '\?'), array('[0-9]*', '[0-9]'), preg_quote($out['ip_addr']) クオートしたIPアドレスに、「*」か「?」があれば、「数字*」か「数字」に置き換える? さらに、その結果が、$ip_addrの中に、当てはまるか、確認? 意味が分かりません……。 IF文の条件式で、何をしようとしている(と想定される)か、教えてください

    • ベストアンサー
    • PHP
  • if文でチェックしている内容を教えてください

    メールアドレスをチェックしているif文ですが どんな内容をチェックしているのでしょうか? if (preg_match('/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i', $mailaddress))・・・

    • ベストアンサー
    • PHP
  • メールサーバー⇒アドレス抽出

    下記のようにメールサーバーにアクセスし、アドレスを抽出しようと思ったのですが思い通りに値が帰ってきません。タイトルは正常に抽出できたのですが、アドレスはどうもうまくいきません。致命的なミスはないと思うのですがどこが間違っているのでしょうか… 宜しくお願いします。 function check_mail($login_id, $login_pwd, $host) { //戻り値生成 $ret = array(); ・・・途中省略・・・ /* 送信者アドレスの抽出 */ if (eregi("From:[ \t]*([^\r\n]+)", $head, $freg)) { $from = addr_search($freg[1]); } elseif (eregi("Reply-To:[ \t]*([^\r\n]+)", $head, $freg)) { $from = addr_search($freg[1]); } elseif (eregi("Return-Path:[ \t]*([^\r\n]+)", $head, $freg)) {  $from = addr_search($freg[1]); } */ //アドレスを格納 $ret[] = $from; 途中省略 ----------- /* メールアドレスを抽出する */ function addr_search($addr) { if (eregi("[-!#$%&\'*+\\./0-9A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+", $addr, $fromreg)) { return $fromreg[0]; } else { return false; } }

    • ベストアンサー
    • PHP
  • PHP内 メールアドレス 暗号化 必要性あり?スパム対策

    こんにちは、 PHPファイル内に記述しているメールアドレスは、HTMLファイルに記述しているメールアドレスのようにメールアドレスを自動回収するクラウラーに回収されてしまうのでしょうか? もしそうであれば、PHPファイル内で下記のように変数として使用するメールアドレスを暗号化したいのですが、 >コード $mail = "example@example.com" 「example@example.com」を暗号化したいです。 >end コード $mailは、「mail」関数や「send_mail」関数等に格納してメール送信に使用しするので、今回の場合、メールアドレス(example@example.com)がブラウザーに出力される必要はありません。 PHPファイル内のメールアドレスを暗号化する場合、通常のHTMLを16進数に変更するソフトで暗号化(16進数化)すれば良いのでしょうか? ちなみに、HTMLメールアドレスを16進数に変更するソフトは、「HTMLエンティティ生成」を現在使用しています。 URL:http://ab.jpn.ph/soft/html_rand.html もしもHTMLを16進数に変更するソフトでのphpファイル内のメールアドレスの暗号化が不可能な場合、PHP内に記述されたメールアドレス(又はPHPコードを)暗号化するソフトや方法などをご紹介下さい。 よろしくお願いします。 キャサリン

    • ベストアンサー
    • PHP
  • phpの質問です。

    phpの質問です。 下記サイトを参考に http://tenderfeel.xsrv.jp/php/861/ [php] ワンタイムURLの作成と登録確認のメール送信のテストをしています。 index.php <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>テスト</title> </head> <body> スタッフ追加<br/> <br/> <form method="post" action="send.php"> メールアドレスを入れてください<br/> <input type="text" name="mail" style="width:200px"><br/> <input type="button" onclick="history.back()" value="戻る"> <input type="submit" value="OK"> </form> </body> </html> send.php <?php $tokendir = dirname( __FILE__ ). DIRECTORY_SEPARATOR ."token" . DIRECTORY_SEPARATOR; if($_POST["mail"]==""){ print "メールアドレスを入力してください"; }elseif(mb_strlen($_POST["mail"])> 0 && !preg_match("/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i",$_POST["mail"])){ print "メールアドレスの書式に誤りがあります。"; }else{ print "確認メールを送信しました"; mail_to_token($_POST["mail"]); } if(isset($_GET["key"])){ if(delete_old_token($_GET["key"])){ print "登録完了しました。"; }else{ print 'もう一度初めからやり直してください。'; } } function mail_to_token($address) { global $tokendir; $limit = (time()+3600); $token= rand(0,100).uniqid();//トークン touch($tokendir.$token.".log");//トークンファイル作成 $url = $_SERVER["HTTP_REFERER"]."?key=".$token; file_put_contents($tokendir.$token.".log", $limit, LOCK_EX);//期限保存 delete_old_token($token);//古いトークン削除 //本文スタイル $message="登録を完了するには、以下のアドレスを開いてください。\n60分以内にアクセスが無かった場合は無効となります。\n"; $message.=$url."\n\n"; my_send_mail($address,'登録確認',$message); } function delete_old_token($token = NULL) { global $tokendir; if (is_dir($tokendir)) { if ($dh = opendir($tokendir)) { while (($file = readdir($dh)) !== false) { if(is_file($tokendir.$file) && is_null($token)){ $data = file_get_contents($tokendir.$file); if(time()> $data) unlink($tokendir.$file); }else if(is_file($tokendir.$file) && !is_null($token)){ if(time() <(filemtime($tokendir.$token.".log")+3600) ){ @unlink($tokendir.$token.".log"); return true; }else{ @unlink($tokendir.$token.".log"); return false; } } } closedir($dh); } } } function my_send_mail($mailto, $subject, $message) { $message = mb_convert_encoding($message, "JIS", "UTF-8"); $subject = mb_convert_encoding($subject, "JIS", "UTF-8"); $header ="From: WebTecNote <info@example.com>\n"; mb_send_mail($mailto, $subject, $message, $header); } ?> ◎参考サイトを微調整して上記ソースを作成。 ◎ドキュメントルートにtokenフォルダを作成。 メール送信とトークンは無事来ましたが、 if(isset($_GET["key"])){ if(delete_old_token($_GET["key"])){ print "登録完了しました。"; }else{ print 'もう一度初めからやり直してください。'; } } 上記の部分のクリックして「登録完了しました。」が作動しません。 なぜでしょうか?

    • ベストアンサー
    • PHP
  • php複数キーワード検索

    いつもお世話になっております。 php+MySQLにて検索機能を作成しています。 キーワードが1つの場合には以下のスクリプトで正常に動作していますが、全角あるいは半角のスペースによって複数キーワードを入れた場合にも検索が行われるようにしたいと思っています。 現在のスクリプト $word=$_POST["seek"]; $word=stripslashes($word); $con_word=mb_convert_encoding($word,"EUC-JP","auto"); //データベース接続がここに入ります $sql="SELECT words,name,id FROM profile WHERE words like '%$con_word%'"; ここで、スペースを" AND "に置き換えるために、 $word=preg_replace('/\s+/',' ',$word); $word=preg_replace('/ /',' AND ',$word); あるいは $word=mb_convert_kana($word,"as","EUC-JP"); $word=preg_replace('/ /',' AND ',$word); などを試してみたのですがうまく動作しません。 どなたか問題点を具体的にご指摘いただけないでしょうか。 よろしくお願いいたします。 *環境 php mysql レンタルサーバ(ロリポップ)

    • ベストアンサー
    • PHP