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)) {
字数(6桁の数字)
if (preg_match("/^[0-9]{6}$/", $var)) {
字数(3桁以上7桁以下の数字)
if (preg_match("/^[0-9]{3,7}$/", $var)) {
字数(3桁以上の数字)
if (preg_match("/^[0-9]{3,}$/", $var)) {
字数(7桁以下の数字)
if (preg_match("/^[0-9]{,7}$/", $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;
}