PHP で文字列を加工する時に便利なメソッドが詰まったライブラリ「str」の紹介です。
PHPであれば、POSTで受け取った文字列を " 置換 "、" 特定ワードが含まれているかチェック " など、文字列を操作する処理が必要になることは珍しくありません。
そんな文字列の色々が簡単に出来るようになる PHP用のライブラリが「str」です。
- 細かい文字列の加工や 抜き出し、特定ワードが含まれているかチェックなど、文字列の操作が簡単に出来るようになります
str のインストールは ' composer
' を使って コマンドライン上から行います。また、PHPのバージョンが ' 7.0 以上
' の必要があるので、注意してください。
# composer を使って str のインストール
composer require str/str
strの使い方は簡単で、ライブラリをインスタンス化して、メソッドを通すだけで使うことが出来ます。
use Str\Str; // Strの読み込み
// use Str\Str as StrLib; // as を使って読み込み名を変更する事も可能です
// strのインスタンス化
$str = new Str('this sentence to be upper case');
// 最初の一文字を大文字に変換
$str->upperCaseFirst(); // This sentence to be upper case
また、関数を繋げる、メソッドチェーンにも対応しています。
use Str\Str; // Strの読み込み
// use Str\Str as StrLib; // as を使って読み込み名を変更する事も可能です
// strのインスタンス化
$str = new Str('this sentence to be upper case');
// メソッドチェーン
$str->upperCaseFirst()
->length(); // 30 (文字数をカウント)
文字列を加工するメソッド
・ ensureLeft
・ ensureRight
ensure は文字列の左右に指定文字を添えるメソッドです。' ensureLeft
' なら 左 ( 文字先頭 ) に、 ' ensureRight
' ( 文字後尾) なら 右に 指定文字が添えられます。
文字列の先頭 or 後尾が指定文字と一致する場合は、指定文字が追加されません。
$str = new Str('文字列*');
echo (string)$str->ensureLeft('*');
// *文字列*
$str = new Str('*文字列*');
// 指定文字は追加されません
echo (string)$str->ensureLeft('*');
// *文字列*
・ toLowerCase
・ toUpperCase
to**Case は 文字列を変換するメソッドです。' toLowerCase
' なら小文字に、 ' toUpperCase
' なら大文字に変換されます。
$str = new Str('Apple');
// 小文字に変換
echo $str->toLowerCase(); // apple
// 大文字に変換
echo $str->toUpperCase(); // APPLE
・ replace
・ replaceWithLimit
' replace
' は ベースとなる文字を 指定した文字に置き換えるメソッドです。第一引数には 置き換える文字、第二引数には置き換えたい文字がはいります。
replace は指定文字を全て置き換えるのに対し、' replaceWithLimit
' は置き換える文字の個数を指定できます。" 第一引数には置き換えたい文字 "、" 第二引数には置き換える文字 "、 " 第三引数には置き換える文字の個数 " を指定します。
$str = new Str('Apple');
// replace : 'A' を 'a'に置き換え
echo $str->replace('A','a'); // apple
// replaceWithLimit : 一つだけ "p" を "P"に置き換え
echo $str->replaceWithLimit('p', 'P', 1); // APple
・ repeat
' repeat
' は インスタンス化した文字列を指定回数繰り返すメソッドです。第一引数で繰り返す回数を Int 型で指定します。
$str = new Str('あ。');
echo $str->repeat(3); // あ。あ。あ。
・ reverse
' reverse
' は文字を反転させたい時に使うメソッドです。一時的なパスワードや暗号化する時などに組み合わせると便利に使えそうです。
$str = new Str('おえういあ');
echo $str->reverse(); // あいうえお
・ random
・ shuffle
' random
' ランダムな文字列を作成するメソッドです。第一引数には生成する文字数、第二引数には最大のサイズ、第三引数には許可する文字を指定できます。
' shuffle
' メソッドは元となる文字列をランダムに入れ替えてくれます。
## random ##
$str1 = new Str('');
//ランダムな文字列を10文字で作成 * 生成される文字は毎回変わります
echo $str1->random(10); // LsGuOPgtJ4
$str2 = new Str('abc def');
// 許可する文字を指定することもできます
echo $str2->random(3, -1, 'abcdef'); // e.x.p : edf
## shuffle ##
$str3 = new Str('/何かの文字列');
// 文字列をランダムに入れ替えます
echo $str3->shuffle(); // e.x.p : の列/文字か何
・between
' between
' は、元なる文字から文字の間の文字列を抜き出すメソッドです。
$str = new Str("#何かの文字列/ ");
// 指定文字から指定文字の間の文字列の抜き出し
echo (string)$str->between("#", '/'); // 何かの文字列
・ join
' join
' は中間文字を指定して文字を連結するメソッドです。第一引数には連結する中間文字、第二引数には連結する文字を配列で指定します。
$str = new Str('1');
// 文字列を連結
echo $str->join('-', ['2', '3']); // 1-2-3
文字列を確認するメソッド
・ contains
・ containsAll
・ containsAny
contains** はベースとなる文字列に、指定文字が含まれているかチェックするメソッドです。
' contains
' は 指定した文字が 一文字でも含まれていたら trueを返します。
' containsAll
' は指定する文字が複数ある場合に使用し、引数の配列内の文字が全て含まれている場合に true を返します。
それに対し、 ' containsAny
' は引数の配列の文字が一つでも含まれていれば true を返します。
// 元になる文字列
$str = new Str('Apple');
## contains ##
// A が含まれているので true
echo $str->contains('A'); // true
// aが含まれていないので true
echo $str->contains('a', false); // true
// if( ! $str->contains('A') ){ // 上のコードに相当 }
## containsAll ##
// 配列の文字が "Apple"に全て含まれているので true
echo $str->containsAll(['A', 'p', 'e']); // true
// 配列内の要素 0 が 'Apple'内に含まれていないので false
echo $str->containsAll(['A', 'p', '0']); // false
## containsAny ##
// A が含まれているので true
echo $str->containsAny(['A', 'c', 'bar']); // true
// 配列内の文字が Appleに どれも含まれないので false
echo $str->containsAny(['foo', 'c', 'bar']); // false
# containsAnyの実用例
$str1 = new Str('NGワード');
// NG が 含まれているので true
echo $str1->containsAny(['NG', 'A', 'B']); // true
// $str1 の文字列に配列内の文字がどれも当てはまらないので false
echo $str1->containsAny(['OK', 'A', 'B']); // false
・ startsWith
・ startsWithAny
・ endsWith
・ endsWithAny
' startWith
' メソッドはベースとなる文字列が 指定文字から始まっているか、チェックするメソッドです。第一引数には 指定文字をいれます。 startWithは 1つに対し、' startWithAny
' メソッドは配列で複数指定できます。
また、endWith** メソッドは 指定文字で終わっているかチェックするメソッドです。
// 元になる文字列
$str = new Str('Apple');
## startWith, startWithAny ##
// A から始まっているので true
echo $str->startsWith('A'); // true
// 配列内の要素に A があるので true
echo $str->startsWithAny(['foo', 'A', 'bar']);
## endWith, endWithAny ##
// 'Apple' は最後が e で終わっているので true
echo $str->endsWith('e'); // true
// 配列内の要素に A があるので true
echo $str->endsWithAny(['foo', 'e', 'bar']); // true
以上が str の紹介でした。上記で紹介したメソッドは一部で、" 文字列がUUID形式か確認 " したり、" 文字列を配列に分解 "するなど、便利なメソッドがまだまだ用意されています。
( * 執筆時点のバージョンで およそ 100個以上 )
PHP 7.0以上の制約がありますが、文字列の加工が必要な時には役立つライブラリです。また依存ライブラリも無いので どんなプロジェクトでも気軽に導入できそうです。
GitHub : fe3dback/str