2025年05月15日
PHP関数:preg_match()
この関数の説明
preg_match() は、文字列を正規表現で検索するPHP関数です。
strpos()と同じ機能以外に下記の様な用途にも利用できます。
①入力データが空白か否かを判断する。
②文字列から正規表現にマッチするデータを取り出す
③文字列が正しい電話番号や郵便番号かをチェックする
関数
preg_match( $search , $data , $array )
パラメータ
$search(正規表現文字)必須
チェックする内容を正規表現で指定します。
$data (文字列)必須
サーチする文字列を指定します。
$array(配列)(オプション)
正規表現にマッチしたデータを取り出す配列名を指定します。
この関数は発見したデータは1つしか取り出せません。
総て取り出す場合は、preg_match_all() を利用します。
戻り値
マッチした場合に 1 を返します。 マッチしなかった場合は 0 を返します。
利用例
<?php
$data='abc,item,abc';
preg_match('/item/' , $data , $ans_ary);
$ans_chr = implode( $ans_ary );
if($ans_chr == 'item'){
echo 'itemは文字列の中にあります。<br>';}
else{
echo 'itemは存在しません。<br>';}
?>
■上記を実行すると下記が返ります。
itemは文字列の中にあります。
■strpos()でも同じ事ができます。
<?php
$url = get_the_permalink();
$Judgment = preg_match('/php/' , $url );
echo $Judgment ? 'PHPページ' :'PHP以外のページ';
?>
■この関数は表示中のページが該当ページか?否かの判断によく使われます。
■PHPカテゴリページの場合は「PHPページ」が表示されます。
■4行目:三項演算子を使ったif文を利用しています。
■strpos()でも同じ事ができます。
③入力フィールドが空か否かを判断する
フォームの入力フィールドが空か否かを判断する時に利用されます。
<?php
$data01 = ' ';//半角スペース、全角スペース、TABが入っています。
$data02 = 'test';
$Judgment01 = preg_match('/[^\s ]/u' , $data01 );
echo $Judgment01 ? '文字があります。<br>' :'$data01は空白です。<br>';
$Judgment02 = preg_match('/[^\s ]/u' , $data02 );
echo $Judgment02 ? '$data02に文字があります。<br>' :'空白です。<br>';
?>
■下記が表示されます
$data01は空白です。
$data02に文字があります。
■4行目、6行目
データに半角スペース、全角スペース、タブ等の空白文字以外の文字があるで判断しています。
理由はnullが\sでは検知できないために、空白文字以外の文字があるかで見ています。
④電話番号を取り出す。
<?php
$data='電話番号:080-992-1234';
preg_match('/0\d{1,2}-\d{3,4}-\d{4}/' , $data , $tel_ary );
$tel_chr = implode( $tel_ary );
echo $data.'<br>';
echo $tel_chr.'<br>';
print_r($tel_ary);
?>
■実行結果は下記になります。
電話番号:080-992-1234
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文を利用しています。
➆Eメールアドレスをチェックする
下記は一般的にEメールアドレスを判断する時に利用される正規表現です。
しかしは厳密なチェックはできない事を理解して下さい。
例えばGmailの場合は「_」は使用できない記号ですが、下記のルールでは正しいメールアドレスと判定されます。
<?php $email = '[email protected]'; $Judgment = preg_match('/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/' , $email ); echo $email.'<br>'; echo $Judgment ? ' 正しいと思われるメールアドレスです' :' メールアドレスに間違いがあります'; ?>
■上記の結果は下記になります。
[email protected]
正しいと思われるメールアドレスです
■チェックなので先頭(^)、末尾($)で括っています。
■5行目:三項演算子を使ったif文を利用しています。
関連情報
関連関数は 正規表現で操作する関数 を参照してください。