sit in a circle and chat happily

PHP 11日目

投稿日:2022-01-27
更新日:2022-03-24
php

【プリント資料】正規表現

例えば、郵便番号は3ケタの数字と4ケタの数字で構成されている。郵便番号をユーザが正しく入力しているか確認するには3ケタ数字と4ケタ数字という構成(一定のパターン)が入力されているかチェックする。正規表現は指定したパターンとマッチするか判定する。

正規表現関数

preg_match(stringパターン, stringチェックする文字列):int

郵便番号のパターンチェック

'/^[0-9]{3}-[0-9]{4}$/'
<body>
  <h1>正規表現1</h1>
  <p>
    <?php
    $str = '123-4567';
    if (preg_match('/^[0-9]{3}-?[0-9]{4}$/', $str)) {
      echo '郵便番号です';
    } else {
      echo '郵便番号ではありません';
    }
    ?>
  </p>
</body>

携帯電話番号のパターンチェック

    echo '<h2>問題:携帯電話番号?  </h2>';
    // 携帯番号のパターンチェック
    // OK「携帯番号です」
    // NG「携帯番号じゃない」と表示
    // ハイフンあり・なしOK
    // 「090」「080」「070」始まりのみOK
    $mobile = '020-0000-0000';
    echo "{$mobile}<br>";
    if (preg_match('/^0[7-9]0-?[0-9]{4}-?[0-9]{4}$/', $mobile)) {
      echo '携帯番号です<br>';
    } else {
      echo '携帯番号ちゃいます<br>';
    }

    $mobile = '08000000000';
    echo "{$mobile}<br>";
    if (preg_match('/^0[7-9]0-?[0-9]{4}-?[0-9]{4}$/', $mobile)) {
      echo '携帯番号です';
    } else {
      echo '携帯番号ちゃいます';
    }
    // 携帯のパターン:別の書き方例
    // ('/^((070)|(080)|(090))-?[0-9]{4}-?[0-9]{4}$/', $mobile)
ブラウザ出力内容

パターン修飾子(末尾デリミタの後に記述)

修飾子説明
iアルファベットの大文字と小文字の違いを無視する
sシングルラインモード「.(ドット)」を改行文字にもマッチさせる
mマルチラインモード 行単位でマッチングを行う
^と$を行ごとにマッチさせる
uパターン文字列をUTF-8エンコードで扱う(全角文字に対応させる)
D$メタ文字を検索対象文字列の終わりにのみマッチさせる
対象文字列の末尾に改行がある場合マッチしない
※D未指定時でかつ最後の文字が改行の場合、改行の直前の文字も$メタ文字の対象になる
※mを指定している場合、この修飾子は無視される
    echo '<h2>全角文字のパターンチェック</h2>';
    $name = '久保だ大久保';
    var_dump(
      // preg_match('/^.{3}$/', $name)
      // パターン修飾子「u」で全角文字対応
      // preg_match('/^.{3}$/u', $name)
      // preg_match('/です$/u', $name)
      // 後方一致:$のみ記述
      // preg_match('/^です/u', $name)
      // 前方一致:^のみ記述
      preg_match('/大久保/u', $name)
      // 文章内一致:^も$もつけない
    );
ブラウザ出力内容
カテゴリー