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文を利用しています。

 

 


関連情報

関連関数は 正規表現で操作する関数 を参照してください。

 


関数一覧
  • 01.PHPとWordPressプログラム
  • 02.PHPの出力コマンド
  • 03.PHPの変数規則と文字連結
  • 04.PHPのif文
  • 05.PHPの配列とループ処理
  • 06.PHPのオブジェクト
  • 07.PHPの関数
  • 08.PHPの正規表現
  • 09.PHPファイルや関数の読み込み
  • 10.PHPのフォーム操作
  • 11.オートコンプリートとは?
  • array_keys()
  • array_reverse()
  • checkdate()
  • count()
  • date()
  • echo
  • empty()
  • explode()
  • implode()
  • in_array()
  • intval()
  • isset()
  • preg_match_all()
  • preg_match()
  • preg_replace()
  • preg_split()
  • print_r()
  • session_id()
  • session_start()
  • sprintf()
  • str_replace()
  • strpos()
  • trim()
  • var_dump()