【PHP】これで分かる関数! – 正規表現のよく使用するパターン –

PHP

更新履歴

更新日更新者更新内容
2021/8/21JJI・”はじめに”の段落を追加
・サンプルプログラムの実行結果に画面の画像を追加

はじめに

サンプルプログラムの中で次の記事で載せている関数を使用している場合があります。

電話番号(携帯番号)

サンプルプログラムです。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // 共通ライブラリの読み込み
    require_once __DIR__ . "../../../lib/sample_common.php";

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】正規表現よく使用するパターン<br>\n";

    // 電話番号(携帯番号)、070、080、090で開始し、999-9999-9999の形式
    echo "電話番号(携帯番号)の正規表現<br>\n";    
    $match = "/^0[7-9]0-\d{4}-\d{4}$/";
    echo "090-1234-5678:" . preg_match($match, "090-1234-5678", $hits) . ": ";    
    echo "090-1234-567:" . preg_match($match, "090-1234-567", $hits) . ": ";    
    echo "090-1234-5678-9:" . preg_match($match, "090-1234-5678-9", $hits) . ": ";    
    echo "060-1234-5678:" . preg_match($match, "060-1234-5678", $hits) . ":<br>\n";    
?>

実行結果です。

・画面

・HTML


ファイル名:sample02_06_31.php<br>
【PHP】正規表現よく使用するパターン<br>
電話番号(携帯番号)の正規表現<br>
090-1234-5678:1: 090-1234-567:0: 090-1234-5678-9:0: 060-1234-5678:0:<br>

URL

サンプルプログラムです。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // 共通ライブラリの読み込み
    require_once __DIR__ . "../../../lib/sample_common.php";

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】正規表現よく使用するパターン<br>\n";

    // URL、文字列の先頭がhttp://、https://で始まる
    echo "URLの正規表現<br>\n";    
    $match = "#^(http://|https://)#";
    echo "http:/aaa:" . preg_match($match, "http:/aaa", $hits) . ": ";    
    echo "http://aaa:" . preg_match($match, "http://aaa", $hits) . ": ";    
    echo "ahttp://aaa:" . preg_match($match, "ahttp://aaa", $hits) . ": ";    
    echo "https://aaa:" . preg_match($match, "https://aaa", $hits) . ":<br>\n";    
?>

実行結果です。

・画面

・HTML



ファイル名:sample02_06_32.php<br>
【PHP】正規表現よく使用するパターン<br>
URLの正規表現<br>
http:/aaa:0: http://aaa:1: ahttp://aaa:0: https://aaa:1:<br>

郵便番号

サンプルプログラムです。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // 共通ライブラリの読み込み
    require_once __DIR__ . "../../../lib/sample_common.php";

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】正規表現よく使用するパターン<br>\n";

    // 郵便番号、999-9999の形式であること
    echo "郵便番号の正規表現<br>\n";    
    $match = "/^\d{3}-\d{4}$/";
    echo "123-4567:" . preg_match($match, "123-4567", $hits) . ": ";    
    echo "12-4567:" . preg_match($match, "12-4567", $hits) . ": ";    
    echo "aaa-123-4567-bbb:" . preg_match($match, "aaa-123-4567-bbb", $hits) . ": ";    
    echo "1234567:" . preg_match($match, "1234567", $hits) . ":<br>\n";    
?>

実行結果です。

・画面

・HTML


ファイル名:sample02_06_33.php<br>
【PHP】正規表現よく使用するパターン<br>
郵便番号の正規表現<br>
123-4567:1: 12-4567:0: aaa-123-4567-bbb:0: 1234567:0:<br>

IPアドレス

サンプルプログラムです。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // 共通ライブラリの読み込み
    require_once __DIR__ . "../../../lib/sample_common.php";

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】正規表現よく使用するパターン<br>\n";

    // IPアドレス、1-255.0-255.0-255.1-255の形式であるが、1-255のように数値範囲を
    // 正規表現でチェックするのは表記が長くなる
    // そのため、IPアドレス用のチェック関数でチェックする
    echo "IPアドレスの正規表現<br>\n";    
    echo "1.1.1:" . check_ip("1.1.1") . ": ";    
    echo "1.1.1.1.1:" . check_ip("1.1.1.1.1") . ": ";    
    echo "0.1.1.1:" . check_ip("0.1.1.1") . ": ";    
    echo "1.1.1.1:" . check_ip("1.1.1.1") . ":<br>\n";    
    echo "127.0.0.1:" . check_ip("127.0.0.1") . ": ";    
    echo "192.168.100.152:" . check_ip("192.168.100.152") . ": ";    
    echo "255.255.255.255:" . check_ip("255.255.255.255") . ":<br>\n"; 
    echo "256.0.0.1:" . check_ip("256.0.0.1") . ": "; 
    echo "1.-1.-1.1:" . check_ip("1.-1.-1.1") . ": "; 
    echo "1000.1.1.1:" . check_ip("1000.1.1.1") . ":<br>\n";    

    // IPアドレスチェック
    function check_ip(string $str) :int {
        // 正規表現で999.999.999.999の形式でチェック
        $match = "/^(\d{1,3}\.){3}\d{1,3}$/";
        if(preg_match($match, $str) === 0){
            return 0;
        }

        // IPアドレスの各要素の数値範囲チェック
        // 1、4番目は1-255の範囲、2、3番目は0-255の範囲であること
        $ip = explode(".", $str);

        for($i = 0; $i < count($ip); $i++) {
            $ip_num = intval($ip[$i]);

            if($i === 0 || $i === 3) {
                if(1 > $ip_num || $ip_num > 255) {
                    return 0;
                }
            }
            if($i === 1 || $i === 2) {
                if(0 > $ip_num || $ip_num > 255) {
                    return 0;
                }
            }
        }
        return 1;
    }
?>

実行結果です。

・画面

・HTML


ファイル名:sample02_06_34.php<br>
【PHP】正規表現よく使用するパターン<br>
IPアドレスの正規表現<br>
1.1.1:0: 1.1.1.1.1:0: 0.1.1.1:0: 1.1.1.1:1:<br>
127.0.0.1:1: 192.168.100.152:1: 255.255.255.255:1:<br>
256.0.0.1:0: 1.-1.-1.1:0: 1000.1.1.1:0:<br>

コメント