正規表現

正規表現は文字の組み合わせを定義したパターンを使用し、そのパターンに適合(マッチ)する文字列を検索したり、置換したりするのに使います。この正規表現を使えばパスワードなどの入力画面でパスワードの文字列が形式に合っているかどうか調べることができます。

パターンマッチ

文字列がパターンと一致することを「マッチする」、一致しないことを「マッチしない」といい、マッチするかどうか調べることをパターンマッチといいます。パターンマッチを行うには、ereg()関数を使います。

ereg("[A-Z]{3}", "Lets study PHP", \$s);

[A-Z]{3}これはパターンで、大文字AからZの3文字という表現です。なので、パターンマッチの対象となる文字列の中から該当する文字を探します。ここでは大文字かつ3文字なので PHPとなります。最後の$マークは該当したものを格納する配列です。

eregi()関数 大文字と小文字を区別せず、パターンマッチを行います

eregi("^[a-z]","Lets study PHP",\$s);

[]の前に^が付いています。^は先頭という意味なので、先頭がアルファベットのどれか1文字という意味になります。ここではLetsのLになります。

パスワードの形式を調べる

下記のようにパスワードの入力画面を作る際に、正規表現を使うと入力された文字列が形式に合っているかどうか調べることができます。

パスワード:

ソースコードを見てください。コメント文になっているところが、正規表現で文字列を指定し、真であれば「パスワードは正しい形式です」、偽であれば「パスワードは正しい形式ではありません」と表示されるようにしています。本来この文は別々にファイルを作るのですが、ここではコメントで書きました。コメント文のif文ではa-zで始まり、a-z0-9の文字列で出来ていて、かつ3文字以上8文字以内という指定になっています。サンプルではパスワードを入力して送信を押しても何も起こりませんが、普通に作りパスワードに文字列を入れて送信を押せば真と偽を判別して結果がでるようになります。

セッション

HTTPプロトコルでは、1回の要求と応答が1組の通信となります。これらの通信は独立したやり取りであり、過去に行った通信と関連がありません。このユーザーが行う一連の通信のことをセッションといいます。ショッピングカートやログイン認証などでは、サーバーが過去の通信と同じユーザーとやりとりしているか(セッションが同じであるか)を判断するしくみが必要になります。そこで、クッキーやセッション管理という方法を使います。

Cookie

クッキーは、サーバーが発行したデータを、ブラウザ側の所定の位置に保存するしくみです。まずブラウザがWEBサーバーに何か要求をします。するとサーバーからクッキーが発行されブラウザはその受け取ったクッキーデータを保存しておきます。ブラウザは次回要求時に受け取ったクッキーデータをサーバーに提示します。サーバー側では、以前アクセスしてきたブラウザかどうか特定します。

セッション管理

セッション管理は、ブラウザを識別するためのPHPの機能です。サーバーが発行したID(セッションID)をクッキーなどでブラウザに送ります。サーバー側では、やりとりに関する情報や変数をセッションIDごとに管理します。ブラウザは次回要求時に、受け取ったデータをサーバーに提示します。サーバー側では、受け取ったIDから以前のデータを参照します。


今回は正規表現を使い、パスワード入力画面での文字列指定や文字列を置き換えする関数、文字列を操作するいろいろな文字列関数などちょっとした文法式みたいなものが多く登場してきました。また、クッキーやセッションといったサーバーとブラウザのやり取りの仕組みもここで学ぶことができました。PHPは比較的勉強しやすくjavascriptよりはごちゃごちゃしていないので、プログラムの流れをつかむにはPHPを先に勉強した方がjavascriptにも継げやすいかもしれません。でも自分の場合、javascriptを少しやっていたのでよかったのですが、やってなかったら多分頭を悩まされてたと思います。

11月16日 宮本 勇