【Laravel】Fluent文字列操作を試してみる! その二

Fluent文字列操作関数そのに!

ここではLaravel version 7から追加された新しいヘルパ群のFluent文字列操作関数を簡単な例と一緒に解説していきます。

Laravel 6系以下では動作しませんので、お気をつけください。

それではやっていきましょう!

その一はこちらから。

http://tektektech.com/laravel-fluent-str-methods/1458/

isAsciiヘルパー

isAsciiメソッドは文字列がASCII文字列であるかどうかを判定しているそうです。

Str::of('tektektech')->isAscii();
// true

Str::of('ü')->isAcii();
// false

ACIIであれば大抵文字化け等せず表示できるはずなので、そう言った判定等には使えそうですね。

isEmptyヘルパー

isEmptyメソッドはもうご存知の方も多いと思いますがいつものisEmptyと同じく、文字列がからであるかどうかを判定してくれます。

公式のメソッドではtrim()で文字列だけ取り出すようにしていますが....

そうやって使う想定なんでしょうか・・・。

一応、isEmptyを直接チェインして試しても動作的には大丈夫そうです。

Str::of('')->isEmpty();
// true

Str::of(' ')->isEmpty();
// false (空白のみは空ではない)

Str::of('tektektech')->isEmpty();
// false

/* 以下、公式での使用例 */
Str::of('  ')->trim()->isEmpty();
// true

Str::of('Laravel')->trim()->isEmpty();
// false

isNotEmptyヘルパー

次はisNotEmptyです。

さっきの逆ですね。

文字列が空ではないかどうかを判定します。

Str::of('')->isNotEmpty();
// false

Str::of(' ')->isNotEmpty();
// true (空白のみは空ではない)

Str::of('tektektech')->isNotEmpty();
// true

/* 以下、公式での使用例 */
Str::of('  ')->trim()->isNotEmpty();
// false

Str::of('Laravel')->trim()->isNotEmpty();
// true

kebabヘルパー

次はkebabメソッドです。

その一にてcamelがありましたがそれに似たものですね。

ケバブケース(hoge-huga-hugo)に文字列を変換することができます。

また、引数としてキャメルケースを入れることを想定しているようです。

Str::of('fooBar')->kebab();
// 'foo-bar' (lowerCamel -> kebab)

Str::of('FooBar')->kebab();
// 'foo-bar' (UpperCamel -> kebab)

Str::of('foo_bar')->kebab();
// 'foo_bar' (snake_case -> kebabは出来ない)

Str::of('foobar')->kebab();
// 'foobar'

ご覧いただくとわかりますが、スネークケースはだめそうでした。

lengthヘルパー

次はlengthメソッドです。

lengthメソッドは文字列の長さを返してくれます。

Str::of('')->length();
// 0

Str::of('aiueo')->length();
// 5

Str::of('あいうえお')->length();
// 5

Str::of('This is りんご')->length();
// 11

Str::of('  ')->length();
// 2 (小文字の空白2つ)

Str::of(' ')->length();
// 1 (大文字の空白)

一見見た目では同じに見えますが、空白の大小は混乱の原因になりそうですね...

気をつけましょう。

limitヘルパー

次はlimitメソッドです。

これは、文字列を一定の長さで切り捨てます。

また、デフォルトだと超えた分が"..."で置換されるのですが、そのデフォルトを第二引数へ渡した文字列へ変更できます。

Str::of('This is a pen')->limit(5);
// 'This...'

Str::of('This is a pen')->limit(20);
// 'This is a pen'

Str::of('This is a pen')->limit(5, '...more');
// 'This...more'

Str::of('This is a pen')->limit(5, '〜');
// 'This〜'

どちらかと言うと画面へ表示する際、長い文字列の不規則な折り返し等を避けたり、見切れたりするのを避けるために使う...とかですかね。

cssの方でも折り返しとかの調節は十分できそうですが、所々使える場所はありそうですね。

lowerヘルパー

次はlowerメソッドです。

これは大文字を小文字に変換してくれるメソッドです。

Str::of('LARAVEL')->lower();
// laravel

Str::of('Laravel')->lower();
// laravel

キャメルケースでも大文字だけしっかり小さくしてくれますね。

matchヘルパー

次はmatchメソッドです。

matchメソッドでは正規表現パターンを与えて一致する部分文字列を返してくれます。

Str::of('foo bar')->match('/bar/');
// 'bar'

Str::of('foo bar')->match('/foo (.*)/');
// 'bar'

$s = Str::of('foo bar')->match('/f.o/');
// 'foo'

Str::of('foo bar')->match('/nomatch/');
// ''

いわずもがなの正規表現一致です。

とりあえず困ったらここに行きつきそう・・・w

matchAllヘルパー

matchAllメソッドは正規表現パターンに一致した部分文字列を含むコレクションを返してくれます。

また、グループを指定した場合はそのグループに一致した文字列をもつコレクションを返します。

Str::of('hoge huge hage hugo')->matchAll('/h..e/');
// collect(['hoge', 'huge', 'hage'])

Str::of('bar fun bar fly')->matchAll('/f(\w*)/');
// collect(['un', 'ly']) (fの後に来る任意のアルファベット、アンダーバー、数字いずれかが続く文字列)

Str::of('bar fun bar flyaway')->matchAll('/f(\w*)/');
// collect(['un', 'lyaway'])

pluralヘルパー

pluralメソッドは珍しいですが、単語の単数形を複数形に変えてくれます。

現在は英語のみのサポートのようです。

日本語だと難しそうだなぁ...w

また、引数として数値を渡してあげることで、単数形、複数形で切り替えて取得することができるようです。

Str::of('car')->plural();
// 'cars'

Str::of('child')->plural();
// 'children'

Str::of('index')->plural();
// 'indices'

Str::of('pen and apple')->plural();
// 'pen and apples' (文章はダメ)

Str::of('too')->plural();
// 'toos' (副詞もダメ)

Str::of('favorite')->plural();
// 'favorites' (US)

Str::of('favourite')->plural();
// 'favourites' (UK)

Str::of('child')->plural(2);
// 'children' (複数形)

Str::of('child')->plural(1);
// 'child' (単数形)

不規則な変換もできるっぽいですね。

そして少し意地悪ですが米英で綴りが異なるものも問題はなさそうです!

引数はいるのだろうか・・・?w

デフォルトで複数形で、単数形ならそのままでいいのでは・・・?と思ってしまいますね...w

引数は単語前提なので、文章を渡した場合最後のものだけ適応されそうです。

prependヘルパー

次はprependです。

prependメソッドはしたいした文字列を元の文字列の先頭へ追加します。

その一にて解説したappendを逆からするイメージですね。

Str::of('Framework')->prepend('Laravel ');
// Laravel Framework

replaceヘルパー

次はreplaceメソッドです。

replaceメソッドは第一引数に指定した値が存在したら、第二引数に指定した値で置き換えることができます。

Str::of('will replace : here')->replace('here', 'replaced');
// 'will replace : replaced'

Str::of('will replace : here')->replace('there', 'replaced');
// 'will replace : here'

Str::of('will replace : here and here')->replace('here', 'replaced');
// 'will replace : replaced and replaced'

複数箇所ある場合は全て変換されるようです。

replaceArrayヘルパー

次はreplaceArrayメソッドです。

このメソッドは、配列を利用して、文字列を置き換えていきます。

見つけた順に要素を一つづつ置き換えていきます。

Str::of('hoge and hoge and hoge')->replaceArray('hoge', ['A','B','C']);
// 'A and B and C'

Str::of('hoge and hoge and hoge')->replaceArray('hogee', ['A','B','C']);
// 'hoge and hoge and hoge'

replaceFirstヘルパー

次はreplaceFirstメソッドです。

このメソッドは、文字列中で最初に現れた指定値を置き換えることができます。

第一引数に置き換えられる文字、第二引数に代わって置き換える文字を指定します。

Str::of('hoge and hoge and hoge')->replaceFirst('hoge', 'A');
// 'A and hoge and hoge'

使い所は難しいけど、使いこなしたら便利そう・・・?

replaceLastヘルパー

replaceLastメソッドは先ほどの逆ですね。

文字列中で最後に現れた文字列を置き換えることができます。

Str::of('hoge and hoge and hoge')->replaceLast('hoge', 'A');
// 'hoge and hoge and A'

replaceMatchesヘルパー

次はreplaceMatchesメソッドです。

このメソッドは指定した正規表現パターンに一致する文字列を全て置き換えます。

また、パターンに一致するたびに実行するクロージャを渡すことも可能です。

Str::of('foo bar')->replaceMatches('/bar/', 'hoge');
// 'foo hoge'

Str::of('foo bar')->replaceMatches('/foo (.*)/', 'hoge');
// 'hoge'

Str::of('foo bar fao fco')->replaceMatches('/f.o/', 'hoge');
// 'hoge bar hoge hoge'

Str::of('foo bar')->replaceMatches('/nomatch/', 'hoge');
// 'foo bar'

Str::of('123')->replaceMatches(
    '/\d/', 
    function ($match) {
      return '['.$match[0].']';
    }
);
// '[1][2][3]'

Str::of('123')->replaceMatches(
    '/\d/', 
    function ($match) {
      return $match[0]*2;
    }
);
// 246

これ、クロージャを渡しながらやるといろんなことができそう...

ただ、複雑にしすぎると可読性がヤバそうなので気をつけたほうがいいかもしれませんね...

startヘルパー

次はstartメソッドです。

startメソッドは文字列が指定した文字列で始まっていない場合、先頭にその文字列を追加します。

finishメソッドの逆ですね。

Str::of('this/string')->start('/');
// '/this/string'

Str::of('/this/string')->start('/');
// '/this/string'

prefix的なものを付けたい際に便利そうですね。

upperヘルパー

次はupperメソッドです。

lowerメソッドの逆ですね。

このメソッドは文字列を大文字に変換します。

Str::of('laravel')->upper();
// LARAVEL

Str::of('Laravel')->upper();
// LARAVEL

わかりやすいですね。

その二はここまで!

続きはまた別の記事にて...!

おすすめの記事