PHP 正規表現で入力チェック

2013/10/06

基本知識

正則表現

正規表現とは、あるパターンの文字列を一つの文字列で表現する方法の一つです。
形式言語理論の分野では、正則表現とも呼ばれています。

PHPでは、文字列の抽出や判定に良く使われています。
プログラミングでは入力チェックや、特定の値を抽出するときなどによく使用しますね。

リファレンス

オプション
i大文字小文字を区別しない
mマルチラインモード
sドットメタ文字を改行を含む全ての文字にマッチ
x空白を無視
エスケープシーケンス
\\\
\n改行
\t水平タブ
\aベル
\bバックスペース
\rキャリッジリターン
\v垂直タブコード
\eエスケープコード
\zエンドオブファイル(EOF)
\"ダブルクオート
\'シングルクオート
メタ文字
.改行を除く任意の1文字
*0回以上の連続する文字
+1回以上の連続する文字
?0または1回だけの文字
^文字列の先頭
$文字列の末尾
\エスケープ文字
|OR
()パターングループ
[]文字クラス
{}量指定子
\n改行
\rキャリッジリターン
\tタブ
\d数字 [0-9]
\D数字以外 [^0-9]
\w英数字 [_a-zA-Z0-9]
\W英数字以外 [^_a-zA-Z0-9]
\s空白 [ \t \r\f]
\S空白以外 [^ \t\n\r\f]
\b単語境界 \w、\Wの間
\B単語境界以外
\x??16進数
文字クラス
-範囲
^「以外」にマッチ
a-z小文字の半角英文字
A-Z大文字の半角英文字
0-9数字
^0-9数字以外
[:alnum:][:alpha:]+[:digit:]
[:alpha:][:lower:]+[:upper:]
[:lower:]小文字の半角英文字 [a-z]
[:digit:]数字 [0-9]
[:blank:]スペースとタブ [ \t]
[:cntrl:]制御文字
[:graph:][:alnum:]+[:punct:]
[:print:][:alnum:]+[:punct:]+スペース
[:punct:]! " # $ % & ' ( ) * + , - . /
[:space:]空白文字 [ \t\n\r\f\v]
[:upper:]大文字の半角英文字 [A-Z]
[:xdigit:]16進数 [0-9A-Fa-f]
量指定子
*0回以上の連続する文字
+1回以上の連続する文字
?0または1回だけの文字
{n}?n回の連続する文字
{n,}?n回以上の連続する文字
{n, m}?n回以上、m回以下の連続する文字

判定サンプル

はじめに

PHPで正規表現を用いた抽出、判定を行うには、preg_match関数を使用します。
第一引数に正規表現、第二引数に検索する文字列、第三引数に抽出データを格納する変数を指定します。
preg_match関数は、マッチした場合に true を、しない場合に false を返します。

ある文字列から、マッチする複数の文字列を抽出したい場合は、preg_match_all関数を使用します。

メールアドレス


$str = "info@example.com";
if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $str)) {
    echo "OK";
} else {
    echo "NG";
}

郵便番号


$str = "130-0001";
if (preg_match("/^\d{3}\-\d{4}$/", $str)) {
    echo "OK";
} else {
    echo "NG";
}

電話番号

// XX-XXXX-XXXX の場合


$str = "03-1234-5678";
if (preg_match("/^\d{2}\-\d{4}\-\d{4}$/", $str)) {
    echo "OK";
} else {
    echo "NG";
}

// XXX-XXXX-XXXX の場合


$str = "080-1234-5678";
if (preg_match("/^\d{3}\-\d{4}\-\d{4}$/", $str)) {
    echo "OK";
} else {
    echo "NG";
}

// XXXX-XXXX の場合


$str = "1234-5678";
if (preg_match("/^\d{4}\-\d{4}$/", $str)) {
    echo "OK";
} else {
    echo "NG";
}

// XX-XXXX の場合


$str = "34-5678";
if (preg_match("/^\d{2}\-\d{4}$/", $str)) {
    echo "OK";
} else {
    echo "NG";
}
Related

Vagrant+Docker+PHP環境で「session.save_path」指定時に、セッションファイルが空になるエラー

ファイル共有でのフォルダの所有者を設定 結論 PHP5.4.28 からセッションファイルのownerはrootもしくはWebサーバのユーザに限るという制限が...

LINEと連携したテイクアウト事前注文システム徹底比較!

目次 テイクアウト予約・注文受付システムのトレンド LINEと連携したテイクアウト事前注文システムの価格表 L.B.B.Cloud テイクイーツ ...

PHPで動画の撮影日を取得

PHPで動画の撮影日を取得 概要 PHPからffprobeコマンドを実行し、動画の撮影日時を取得します。 コード $posted_at = ...

FullCalendarでGoogleカレンダーのようなUIを実装

jQueryプラグインFullCalendarのサンプル 概要 FullCalendarを使用して、GoogleカレンダーのようなUIを実装する使用例を...

PHP Laravel5.2でmulti-auth(複数テーブルでの認証)を実装

Laravel5.2でマルチ認証 概要 LaravelとはPHPの中で今最も伸びているフレームワークです。 処理速度が遅いなどありますが、かなり使い安く拡...

PHP 正規表現でIPアドレス形式の文字列か判定

正規表現でIPアドレスの入力チェック 概要 フォームで入力されたIPアドレスが正当な文字列か判定するためのバリデーション処理を実装します。 基本的...
トップへ戻る