1. satorunooshie

    Posted

    satorunooshie
Changes in title
+PHPにおける文字列置き換え大全
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,209 @@
+#目次
+[よく使う正規表現のパターンマッチ](#よく使う正規表現のパターンマッチ)
+・[携帯番号の例](#携帯番号の例)
+・[郵便番号の例](#郵便番号の例)
+・[全角カタカナの例](#全角カタカナの例)
+・[なんちゃってメールアドレスの例](#なんちゃってメールアドレスの例)
+・[クレジットカード全社の例](#クレジットカード全社の例)
+・[IPアドレスの例](#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でもエスケープするため
+
+##携帯番号の例
+
+```example.php
+//080-1234-5678, 09012345678
+$tel_pattern = '/\A(090|080|070)-?\d{4}-?\d{4}\z/';
+```
+
+##郵便番号の例
+
+```example.php
+//111-1112, 1111112
+$postal_code_pattern = '/\A\d{3}-?\d{4}\z';
+```
+
+##全角カタカナの例
+
+```example.php
+$em_kana_pattern = '/\A[\x{30A1}-\x{30FC}().-]+\x/u';
+```
+
+##半角カタカナの例
+
+```example.php
+$en_kana_pattern = '/\A[\x{FF66}-\x{FF9F}]+\x/u';
+```
+
+##なんちゃってメールアドレスの例
+
+```example.php
+$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';
+```
+
+##クレジットカード全社の例
+
+```example.php
+$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アドレスの例
+
+```example.php
+$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``を使う
+
+```example.php
+str_repeat('*', 10);
+```
+
+#入力値を統一する方法
+##小文字から大文字に変換
+``strtoupper()``関数を使う
+``mb_strtoupper()``関数を使えば全角のアルファベットも変換する
+``ucfirst()``関数は最初の文字だけを大文字に変換し
+``ucwords()``関数は最初の単語だけを大文字に変換します
+
+##大文字から小文字に変換
+``strtolower()``関数を使う
+``mb_strtolower()``関数を使えば、全角のアルファベットも変換する
+
+##全角を半角に変換
+``mb_conver_kana()``関数を使う
+
+|オプション|説明|
+|:----:|:----:|
+|r|全角英字を半角に変換|
+|n|全角数字を半角に変換|
+|a|全角英数字を半角に変換|
+|s|全角スペースを半角に変換|
+
+```example.php
+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|半角スペースを全角に変換|
+
+```example.php
+mb_conver_kana($text, 'HV');
+```
+
+#文字エンコードの変換
+``mb_convert_encoding()``関数を使う
+
+```example.php
+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から始まる
+マイナスを指定することもできる
+
+```example.php
+$text = 'asdfghjkl';
+echo mb_substr($text, 0, 5); //asdfg
+echo mb_substr($text, 2); //dfghjkl
+echo mb_substr($text, -5); //lkjhg
+```
+
+#文字列の一部が一致しているか確認する
+``mb_strpos()``関数を使う
+最初に見つかった位置を数値で返す
+
+```example.php
+if (mb_strpos($target, $keyword) === false) echo $keyword . 'が見つかりませんでした';
+```
+演算子は'==='を使う必要があります
+検索する文字が先頭に見つかってしまった場合に0を返すからです。
+
+#文字列の置き換え
+``str_replace()``関数を使う
+
+```example.php
+echo str_replace('before', 'after', $target);
+```