2024年06月14日
PHP関数:preg_match()
この関数の説明
PHP関数の preg_match() は、
①文字列から正規表現にマッチするデータを取り出す
②文字列を正規表現(電話番号等)でチェックする
する関数です。
関数
preg_match( $search , $data , $array )
パラメータ
$search(正規表現文字)必須
チェックする内容を正規表現で指定します。
$data (文字列)必須
サーチする文字列を指定します。
$array(配列)(オプション)
正規表現にマッチしたデータを取り出す配列名を指定します。
この関数は発見したデータは1つしか取り出せません。
総て取り出す場合は、preg_match_all() を利用します。
戻り値
マッチした場合に 1 を返します。 マッチしなかった場合は 0 を返します。
利用例
①電話番号を取り出す。
<?php $data='電話番号:080-992-1234'; preg_match('/0\d{1,2}-\d{3,4}-\d{4}/' , $data , $tel_number); echo $tel_number[0]; ?> <pre> <?php print_r($tel_number);?> </pre>
■実行結果は下記になります。
080-992-1234
Array ( [0] => 080-992-1234 )
■電話番号のルール
・先頭番号は0で始まる2桁か3桁の数字:0\d{1,2}
・2番目の番号は3桁か4桁の数字:\d{3,4}
・3番目の番号は4桁の数字:\d{4}
②電話番号の正当性をチェックする。
<?php $tel_number='080-992-1234'; $Judgment = preg_match('/^0\d{1,2}-\d{3,4}-\d{4}$/' , $tel_number ); echo $Judgment ? '正しい電話番号です' :'電話番号を再確認して下さい'; ?>
■下記が表示されます。
正しい電話番号です
■ポイントは先頭の(^)と末尾の($)で電話番号ルールを括っています。
これを指定しないと「abc080-992-1234」でも文字列の中に電話番号があるので正しいと判断します。
■4行目:三項演算子を使ったif文を利用しています。
③郵便番号をチェックする
郵便番号は「3桁の数字-4桁の数字」のルールがあります。
これをチェックする方法は下記になります。
<?php $data='123-0123'; $Judgment = preg_match('/^\d{3}-\d{4}$/' , $data ); echo $data.'<br>'; echo $Judgment ? '正しい郵便番号です' :'郵便番号に間違いがあります'; ?>
■上記の結果は下記が表示されます。
123-0123
正しい郵便番号です
■郵便番号のルール
・先頭番号は3桁の数字:\d{3}
・2番目は4桁の数字:\d{4}
■チェックなので先頭(^)、末尾($)で括っています。
郵便番号を取り出す場合はこれを指定しないで使います。
■5行目:三項演算子を使ったif文を利用しています。
④メールアドレスをチェックする
メールアドレスは厳密なチェックはできない事を理解して下さい。
例えばGmailの場合は「_」は使用できない記号ですが、下記のルールでは正しいメールアドレスと判定されます。
<?php $email = '[email protected]'; $Judgment = preg_match('/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/' , $email ); echo $email.'<br>'; echo $Judgment ? ' 正しいと思われるメールアドレスです' :' メールアドレスに間違いがあります'; ?>
■上記の結果は下記になります。
[email protected]
正しいと思われるメールアドレスです
■チェックなので先頭(^)、末尾($)で括っています。
■5行目:三項演算子を使ったif文を利用しています。
⑤現在のページを判断する
<?php $url = get_the_permalink(); $Judgment = preg_match('/php/' , $url ); echo $Judgment ? 'PHPページ' :'PHP以外のページ'; ?>
■この関数は表示中のページが該当ページか?否かの判断によく使われます。
■PHPカテゴリページの場合は「PHPページ」が表示されます。
■4行目:三項演算子を使ったif文を利用しています。
⑥入力フィールドにデータがあるか否かを判断する
<?php $input=' '; $Judgment = preg_match('/[^\s ]/' , $input ); echo $Judgment ? 'データがあります' :'データは空です'; ?>
■上記の$iputには、半角スペース、全角スペース、タブが入力されています。
■結果は下記が表示されます。
データは空です
■正規表現のポイント
上記では[]の中で(^)を使っていますが、これは否定を表します。
よって[^\s ]は、半角のスペースや全角のスペース以外の文字があるかを判定しています。
■4行目:三項演算子を使ったif文を利用しています。
関連情報
関連関数は 正規表現で操作する関数 を参照してください。