ホームページによくあるお問い合わせ入力フォームから、住所や電話番号、E-mailアドレスなどの個別情報を、登録をすることがありますよね。
入力されたデータは、人が入力するため、必ずしも想定されたとおりの内容であるとは限りません。
そのため、入力されたデータの内容をチェックし、その妥当性を検証するために、正規表現を用いたパターンマッチングという手法が用いられます。
今回は、この正規表現を使用したパターンマッチングについて紹介したいと思います。
正規表現とは
正規表現は、文字列のパターンマッチングに用いる記法のことです。この正規表現で指定した形式どおりに、データが入力されているかどうかをチェックするために使用されます。
正規表現では、いくつかの特殊文字を使って、形式を表現します。これらの特殊文字を「メタ文字」と呼んでいます。
主な特殊文字とその使用例を一覧表にまとめましたので、紹介しておきます。
特殊文字 | 説 明 |
---|---|
^ | 行頭を表す。例えば「^abc」の4文字は、先頭が「abc」で始まる文字列を表します。文字列の途中に「abc」があってもマッチングしない。 |
$ | 行の終わりを表す。例えば、「します。$」の4文字は、行の終わりに「します。」があるとマッチングする。 |
. | .ピリオドは、改行コード以外の任意の1文字とマッチする。「第 . 章」のように指定すると、「第1章」「第2章」などがマッチする。 |
[abcde] | []内のいずれか1文字とマッチする。 |
[12345] | []内のいずれか1文字とマッチする。 |
[1-9] | [1から9のいずれかの数字とマッチする] |
[a-z] | aからzまでの半角小文字アルファベット1文字とマッチする。 |
[A-Z] | AからZまでの半角大文字アルファベット1文字とマッチする。 | [a-zA-Z] | 半角のアルファベット1文字(大文字、小文字関係なく)とマッチする。,/td> |
[^1-9] | 1から9以外の任意の1文字とマッチする] |
[^abcde] | [ ]内の1文字以外とマッチする。 |
| | 「または」を表す。「abc|1234」はabcという3文字か、1234の4文字にマッチする。 |
* | 直前の1文字の0回以上の繰り返し文字とマッチする。a*は、a,aa,aaa,aaaaのような文字列とマッチする。 但し、文字が何もない状態でもマッチしてしまうので、意味がないかもしれない。 |
+ | 直前の1文字の1回以上の繰り返し文字とマッチする。abc+は、abc,abcc,abcccなどにマッチする。 |
? | 直前の文字の0回または1回だけの登場を表現する。abc?は、ab,abcとマッチする。 |
\ | メタ文字の直前に置き、メタ文字を通常の文字として扱う。\^,\+,\\のように2文字で表す。 |
{n} | 直前の文字がn文字続く |
記号 | 意味 |
^ | 行頭 |
[0-9] | 0から9までのいずれかの数字1文字 |
{7} | 直前の文字が7文字続く |
$ | 行の終わり |
これらの特殊文字を使用して、正規表現「^[0-9]{7}$]をpreg_match関数のパターンとして指定します。このパターンを/で囲み、’/^[0-9]{7}$/’のように文字列で、関数に渡します。
行頭から行の終わりまで、0から9までのいずれかの数字が7文字続くという意味になります。
郵便番号の入力プログラム(p-input.php)
<p>7桁の郵便番号を、以下の書式に従って入力してください。</p> <p>例:2250015 ハイフンなし </p> <form action="p-output.php" method="post"> <input type="text" name="postcode"> <input type="submit" value="確定"> </form>
郵便番号の出力プログラム(p-output.php)
<?php $postcode=$_REQUEST['postcode']; if (preg_match('/^[0-9]{7}$/', $postcode)) { echo '郵便番号', $postcode, 'が確認できました。'; } else { echo $postcode, 'は、正しい郵便番号ではありません。','<br>', '郵便番号を御確認ください。'; } ?>
正しく入力できた場合
正しく入力しなかった場合
郵便番号を御確認ください。
まとめ
正規表現に使用する特殊文字は、今回紹介した文字以外にもたくさんありますので、良く使用するものは、一覧表にまとめておくと便利です。
今回は、preg_match関数を使用して、もっとも一般的な郵便番号のパターンマッチングを紹介しましたが、パスワードなどのパターンマッチングにも使用することが可能です。
正規表現が作成できれば、preg_match関数を使用して、マッチング処理をおこなうプログラムを容易に作成することが可能です。
複雑なパスワードになると正規表現がすこし難しくなりますが、手始めに、簡単なパスワードなどでトライしてみてはいかがでしょうか。
【おすすめ記事】
➡【初心者歓迎】PHP学習で人気のプログラミングスクール
➡バックエンドエンジニアおすすめ!PHPの学習サイト9つ
➡PHPの本・参考書の評判