コピペして使うように作りましたー
間違ってたら教えてください!!
#目次
よく使う正規表現のパターンマッチ
・携帯番号の例
・郵便番号の例
・全角カタカナの例
・なんちゃってメールアドレスの例
・クレジットカード全社の例
・IPアドレスの例
文字列を繰り返す方法
入力値を統一する方法
・小文字から大文字に変換
・大文字から小文字に変換
・全角を半角に変換
・半角を全角に変換
・カナ文字の変換
文字エンコードの変換
文字列の一部を切り抜く方法
文字列の一部が一致しているか確認する
文字列の置き換え
#よく使う正規表現のパターンマッチ
正規表現の基本的な構文
構文 | 説明 |
---|---|
. | 改行文字以外の任意の一文字 |
? | 0回か1回だけのマッチ |
* | 0回以上の繰り返し |
+ | 1回以上の繰り返し |
{n} | n回の繰り返し |
{n,m} | n回以上m回以上の繰り返し |
^ | 文字列及び行の始まり |
$ | 文字列及び行の終わり |
[] | 文字クラス[a-z]ならaからzまでの一文字 |
\A | 文字列の始まり |
\z | 文字列の終わり |
\w | 単語構成文字[a-zA-Z0-9_]とは異なる可能性がある |
\d | 数字 |
\s | スペースタブ改行などの空白文字 |
\S | 空白以外の全ての文字 |
() | パターンのグループ化 |
パターン修飾子はデリミタ(\)の後に書く
パターン修飾子 | 説明 |
---|---|
i | 大文字と小文字を区別しない |
m | 行単位でマッチ |
s | 「.」を改行文字にもマッチさせる |
u | パターン文字列をUTF-8エンコードとして扱う |
x | エスケープするか文字クラスの内部を除いてパターン中の空白文字を無視 |
\
をマッチさせるには
\\\\
とする必要がある
正規表現でもPHPでもエスケープするため
##携帯番号の例
//080-1234-5678, 09012345678
$tel_pattern = '/\A(090|080|070)-?\d{4}-?\d{4}\z/';
##郵便番号の例
//111-1112, 1111112
$postal_code_pattern = '/\A\d{3}-?\d{4}\z';
##全角カタカナの例
$em_kana_pattern = '/\A[\x{30A1}-\x{30FC}().-]+\x/u';
##半角カタカナの例
$en_kana_pattern = '/\A[\x{FF66}-\x{FF9F}]+\x/u';
##なんちゃってメールアドレスの例
$mail_pattern = '/\A[\p{L}0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[\p{L}0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[_\p{L}0-9][-_\p{L}0-9]*\.)*(?:[\p{L}0-9][-\p{L}0-9]{0,62})\.(?:(?:[a-z]{2}\.)?[a-z]{2,})\z/ui';
##クレジットカード全社の例
$cards_pattern = '/\A(4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|^(?:2131|1800|35\d{3})\d{11}$)\z/';
$visa_pattern = '/\A4\\d{12}(\\d{3})?\z/';
$master_pattern = '/\A5[1-5]\\d{14}\z/';
$jcb_pattern = '/\A(3\\d{4}|2100|1800)\\d{11}\z/';
$amex_pattern = '/\A3[4|7]\\d{13}\z/';
$diners_pattern = '/\A(?:3(0[0-5]|[68]\\d)\\d{11})|(?:5[1-5]\\d{14})\z/';
$discovery_pattern = '/\A(?:6011|650\\d)\\d{12}\z/';
##IPアドレスの例
$ipv4_pattern = '\A(?:(?:25[0-5]|2[0-4][0-9]|(?:(?:1[0-9])?|[1-9]?)[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|(?:(?:1[0-9])?|[1-9]?)[0-9])\z';
$ipv6_pattern = '\A((([0-9A-Fa-f]{1,4}:){7}(([0-9A-Fa-f]{1,4})|:))|(([0-9A-Fa-f]{1,4}:){6}(:|((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})|(:[0-9A-Fa-f]{1,4})))|(([0-9A-Fa-f]{1,4}:){5}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}){0,1}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}){0,2}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}){0,3}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:)(:[0-9A-Fa-f]{1,4}){0,4}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(:(:[0-9A-Fa-f]{1,4}){0,5}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})))(%.+)?\z';
参考
https://qiita.com/ryounagaoka/items/dc9fe731d0fa6f8f9daa
#文字列を繰り返す方法
str_repeat
を使う
str_repeat('*', 10);
#入力値を統一する方法
##小文字から大文字に変換
strtoupper()
関数を使う
mb_strtoupper()
関数を使えば全角のアルファベットも変換する
ucfirst()
関数は最初の文字だけを大文字に変換し
ucwords()
関数は最初の単語だけを大文字に変換します
##大文字から小文字に変換
strtolower()
関数を使う
mb_strtolower()
関数を使えば、全角のアルファベットも変換する
##全角を半角に変換
mb_conver_kana()
関数を使う
オプション | 説明 |
---|---|
r | 全角英字を半角に変換 |
n | 全角数字を半角に変換 |
a | 全角英数字を半角に変換 |
s | 全角スペースを半角に変換 |
mb_convert_kana($text, 'r');
##半角を全角に変換
同じくmb_convert_kana()
関数の第二引数を使う
オプション | 説明 |
---|---|
R | 半角英字を全角に変換 |
N | 半角数字を全角に変換 |
A | 半角英数字を全角に変換 |
S | 半角スペースを全角に変換 |
#カナ文字の変換
同じくmb_convert_kana()
関数の第二引数を使う
オプション | 説明 |
---|---|
k | 全角カタカナを半角カタカナに変換 |
K | 半角カタカナを全角カタカナに変換 |
h | 全角平仮名を半角平仮名に変換 |
H | 半角カタカナを全角平仮名に変換 |
c | 全角カタカナを全角平仮名に変換 |
C | 全角平仮名を全角カタカナに変換 |
V | 濁点付きの文字を一文字に変換、KやHと共に使う |
s | 全角スペースを半角に変換 |
S | 半角スペースを全角に変換 |
mb_conver_kana($text, 'HV');
#文字エンコードの変換
mb_convert_encoding()
関数を使う
mb_convert_encoding(mb_convert_encoding($text, 'SJIS'), 'UTF-8', 'SJIS');
mb_convert_encoding(mb_convert_encoding($text, 'EUC-JP'), 'UTF-8', 'EUC-JP');
#文字列の一部を切り抜く方法
mb_substr('文字列', '開始位置'[, '文字数'])
を使う
文字数を省略した場合、開始位置から末尾までの文字列の全てを返す
また先頭は0から始まる
マイナスを指定することもできる
$text = 'asdfghjkl';
echo mb_substr($text, 0, 5); //asdfg
echo mb_substr($text, 2); //dfghjkl
echo mb_substr($text, -5); //lkjhg
#文字列の一部が一致しているか確認する
mb_strpos()
関数を使う
最初に見つかった位置を数値で返す
if (mb_strpos($target, $keyword) === false) echo $keyword . 'が見つかりませんでした';
演算子は'==='を使う必要があります
検索する文字が先頭に見つかってしまった場合に0を返すからです。
#文字列の置き換え
str_replace()
関数を使う
echo str_replace('before', 'after', $target);