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

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

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

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

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

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

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

rbenv環境でRuby on Railsのアプリケーションを一瞬で自動生成

アプリケーション構築時に最初に行う手順 概要 アプリケーションを作成するまでの手順を記載しています。 rbenvなどの環境が設定済と仮定して話を進めま...

Rails devise・authority・rolifyで権限付きの認証機能

devise・authority・rolify 概要 3つのGemを使用して、権限付き認証機能を実装します。 gem インストール Gemfile ...

Rails devise で複数モデルの認証機能を実装

Rails devise で複数モデルを管理 概要 rails のログイン認証 Gem「devise」のインストール・設定方法を紹介します。 よく「d...
トップへ戻る