基礎から解る!PHP入門講座

サイト移転のお知らせ   ⇒ 基礎から解る!PHP入門講座

当サイトはついに移転することになりしました。新URLは  http://www.flzphp.com/ です。
今後ともPHP入門講座を宜しくお願いします。

PHP でこんなことをしよう

正規表現

 正規表現という言葉からは、想像できるものがないんですね。
 初めはいったい何のことなのか、サッパリ解りませんでした。この正規表現は非常に奥が深いものなのですが、簡単に言うと入力された文字が、要求に合っているかどうかを判断するもの、ということです。

 たとえばメールアドレスを入力する欄にちゃんと@が入っているか?とかそう言ったことを判断するわけです。



メールアドレス判断

 まずはereg(パターン,文字列)と言う関数を説明します。これは文字列がパターンに合っているかどうかを判断する関数です。IFと組み合わせることで、文字列つまり入力された文字が、パターンにあっているかどうかを判断し結果を出すわけです。
 ereg("[a-z]",$data)
 これは$dataに代入された文字列に英語の小文字があるかどうかを判断しています。""の部分がパターンを現しています。$dataがこのパターンにあっていればtrueを返します。
 この場合間違えやすいのが、「英語の小文字があるかどうか」という点で「abc」はもちろんOKなのですが、「a4b5c」と他の文字が入っていてもOKだと言うことです。

 文字列を表現するパターンはさまざまあるので、例を出してを表にします。

書式(例)意味
[abcd]小文字abcdのどれか一文字
[a-z]小文字aからzまでのどれか一文字
[a-zA-Z]小文字大文字すべてのどれか一文字
[a-cfgk-]小文字aからcまでとfgk-のどれか一文字
[a-z0-9]小文字すべてと数字のどれか一文字
[a-z]*小文字のどれかゼロ以上、つまりあっても無くてもよい
[a-z]+小文字のどれか一文字以上
[a-z]{3}小文字のどれか3文字{}で文字数を指定
[a-z]{3,}小文字のどれか3文字以上
[a-z]{3,5}小文字のどれか3文字以上5文字以下
(jpg)jpgと言う3文字の単語そのもの
(jpg){2}jpgjpgと2回繰り返すと言う意味
([a-z]+)([0-9]+)()で括ることで、swd9748 というように順序を現す
^[a-z]^先頭を表す、つまり小文字で始まると言うこと
[^a-z][]内に^があると否定を表す、つまり小文字以外を表現
[a-z]|[A-Z]|はどちらか一方の意味、小文字か大文字かを表現
a.cドットは任意の一文字、afc,arc,awcなどを現す
\(\はエスケープ(や*.などは前に\を置いて表現

 とまぁ色々と決まりがあるわけです。それではメールアドレスはどうなるかと言うと
ereg("(^[a-z]+[a-z0-9_-]+)@[a-z]+\.[a-z]{2}\.[a-z]+",$data)
 これで、小文字で始まり、次に小文字数字記号がきて、@、後は小文字、但し2番目は2文字と言うパターンができるわけです。.の前には\がつけられています。.は任意の一文字を現す記号なので、そのままではドットマークと認識しません。そこで\を前において実際のドットであること示しています。
 注:この形式に当てはまらないメールアドレスもあるので、実用はできません。
★正規表現の落とし穴
 そんな大げさなモノではないのですが、私は何度かミスってしまったことがあります。正規表現は、それがあるかどうかを判断するものであってそれそのものではないのです。
 例えば「abc」と言う文字があるかどうかを正規表現でチェックする場合、「abc」はもちろんOKな訳ですが、「abcd」もOKなのです。
 パスワードを数字4文字にしたい時、正規表現では[0-9]{4}でいいのですが、これでは「12345」でもOKなのです。つまり4文字あればいい訳で、5文字以上でもOKなのです。
 この場合は文字数を数え、4文字でなければならないと言う規制を加えなければ、5文字以上でもOKとなってしまうのです。
疑問点はここで検索しよう!

※当サイトにて使用されている写真・文章はすべて 許可なく使用することを禁止いたします。