PHP正規表現

バリデーション

数字のみ
if (preg_match("/^[0-9]+$/", $var)) {

g_数字
if (preg_match("/^g_[0-9]+$/", $var)) {

小数点を含む数字(正の数のみ)
if (preg_match('/^\d+(?:\.\d+)?$/', $var)) {

小数点以下2桁以上
if (preg_match('/\.\d{2,}$/', $var)) {

英数字・ハイフン・アンダースコアのみ許容
if (preg_match("/^[a-zA-Z0-9_-]+$/", $var)) {

英数字・記号
if (preg_match("/^[[:graph:]|[:space:]]+$/i", $var)) {

英数字の混在必須
$blend = false;
if (preg_match("/^[a-zA-Z0-9]+$/", $this->arrParam[$value[1]])
 && preg_match("/[a-zA-Z]+/",      $this->arrParam[$value[1]])
 && preg_match("/[0-9]+/",         $this->arrParam[$value[1]]) ) {
    $blend = true;
}

スペース、タブのみ
if (preg_match("/^[  \t\r\n]+$/", $var)) {
                   ↑全角スペース、半角スペース

スペース、タブが含まれている
if (preg_match("/[  \t\r\n]+/u", $var)) {
                  ↑全角スペース、半角スペース

URL
if (preg_match("@^https?://+($|[a-zA-Z0-9_~=:&\?\.\/\%\#\+-])+$@i", $var)) {

ひらがなのみ
if (preg_match("/^[ぁ-んー]+$/u", $var)) {

ひらがなのみ(タブ、スペースは許可する)
if (preg_match("/^([  \t\r\n]|[ぁ-ん]|[ー])+$/u", $var)) {
                    ↑全角スペース、半角スペース

カタカナのみ
if (preg_match("/^[ァ-ヶヲ-゚ー]+$/u", $var)) {

漢字が含まれている
if (preg_match("/[一-?朗-鶴]+/u", $var)) {

バリデーション:逆

! を付ける

数字を含んでいない
if (!preg_match("/^[0-9]+$/", $var)) {

置換

SSL化
$url = preg_replace('/^http:/', 'https:', $url);

画像パスをSSLに置換
$html = preg_replace('/src=\"http:/', 'src="https:', $html);

改行、タブを1スペースに置換
$sql = preg_replace("/[\r\n\t]/", ' ', $sql);

余分な空白、改行を削除
$var = preg_replace('/[\t\s\r\n]/', '', $var);

冒頭の文字列をトル
$where = preg_replace('/^ and/', '', $where);

冒頭の文字列を置換
$var = preg_replace('/^a_code/', 'b_code', $var);

末尾のカンマ、スペースをトル
$var = preg_replace('/, $/', '', $var);

<br />をトル
$var = preg_replace('|<br\s*/?>|', '', $var);

半角スペースを挟む
$text = preg_replace("/^abc([a-zA-Z0-9])/", "abc $1", $text);

年月日に時刻を足す
$date = preg_replace("/^([0-9]+)\/([0-9]+)\/([0-9]+)$/", "$1-$2-00 00:00:00", $date);

$var = preg_replace("/([0-9]+)×([0-9]+)/", "$1字×$2行", $var);

正規表現に基づいて文字列を分割取得

「数字-数字」から数字と数字を取得
$matches = array();
if (preg_match('/^(\d+)\-([a-zA-Z0-9\-\_]+)$/', $var, $matches)) {
    $var1 = $matches[1];
    $var2 = $matches[2];
}

拡張子を取得
if (preg_match("/.*\.([^\.]*)$/", $img, $file) < 1) {
    echo '拡張子が存在しません';
} else {
    $extension = strtolower($file[1]);
}

正規表現で分割 preg_split

$array = preg_split("/[\s,]+/", 'hypertext language, programming');

print_r($array);

Array
(
    [0] => hypertext
    [1] => language
    [2] => programming
)

文字列を文字要素に分割

$str = 'string';
$chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);

print_r($chars);

Array
(
    [0] => s
    [1] => t
    [2] => r
    [3] => i
    [4] => n
    [5] => g
)

正規表現:メールアドレス

$wsp           = '[\x20\x09]';
$vchar         = '[\x21-\x7e]';
$quoted_pair   = "\\\\(?:$vchar|$wsp)";
$qtext         = '[\x21\x23-\x5b\x5d-\x7e]';
$qcontent      = "(?:$qtext|$quoted_pair)";
$quoted_string = "\"$qcontent*\"";
$atext         = '[a-zA-Z0-9!#$%&\'*+\-\/\=?^_`{|}~]';
$dot_atom_text = "$atext+(?:[.]$atext+)*";
$dot_atom      = $dot_atom_text;
$local_part    = "(?:$dot_atom|$quoted_string)";
$domain        = $dot_atom;
$addr_spec     = "${local_part}[@]$domain";

$dot_atom_loose   = "$atext+(?:[.]|$atext)*";
$local_part_loose = "(?:$dot_atom_loose|$quoted_string)";
$addr_spec_loose  = "${local_part_loose}[@]$domain";

// 携帯メールアドレス用に ..や.@を許容する。
$regexp = "/\A${addr_spec_loose}\z/";

if (preg_match($regexp, $email) === 0) {
    $check = true;
} else {
    $check = false;
}