マルチバイトをサポートする PHP 文字列操作ライブラリ。 PHP 5.4 以降、PHP 7 以降、および HHVM と互換性があります。
s('string')->toTitleCase()->ensureRight('y') == '文字列'
古いドキュメントについては、1.x ブランチまたは 2.x ブランチを参照してください。
なぜ?
インストール
OO とチェーン
実装されたインターフェース
PHP 5.6 の作成
静的ひも状
クラスメソッド
作成する
インスタンスメソッド
追加する | で | 間 | ラクダ化する |
文字 | 折りたたむ空白 | 含まれています | すべてを含む |
含む | countSubstr | ダッシュ化する | 区切り |
で終わる | 任意で終わる | 左確保 | 正しいことを保証する |
初め | getEncoding | 小文字あり | 大文字あり |
htmlデコード | htmlエンコード | 人間化する | インデックスの |
前回のインデックス | 入れる | アルファです | 英数字です |
isBase64 | 空白です | は 16 進数です | はJson |
小文字です | シリアル化されています | 大文字です | 最後 |
長さ | 行 | 最長共通プレフィックス | 最長の共通サフィックス |
最長の共通部分文字列 | 小文字最初 | パッド | パッド両方 |
パッド左 | パッド右 | 先頭に追加する | 正規表現置換 |
削除左 | 右を削除 | 繰り返す | 交換する |
逆行する | 安全な切り捨て | シャッフル | 鈍化する |
スライス | スプリット | で始まる | 任意で開始 |
ストリップ空白 | 部分文字列 | 囲む | スワップケース |
きちんとした | タイトルをつける | アスキーへ | toBoolean |
小文字へ | toSpaces | タブへ | toタイトルケース |
大文字へ | トリム | トリム左 | 右トリム |
切り詰める | 下線付き | アッパーキャメル化 | 大文字最初 |
拡張機能
テスト
ライセンス
部分的には、PHP の標準文字列関数の多くでマルチバイト サポート (UTF-8 を含む) が欠如していることが原因です。ただし、 mbstring
モジュールのマルチバイト互換関数の周囲に OO ラッパーを提供することもできます。 Stringy はいくつかの癖を処理し、追加機能を提供し、文字列の操作を少しでも簡単にすることができれば幸いです。
// 標準ライブラリstrtoupper('fòôbàř'); // 'FòôBàř'strlen('fòôbàř'); // 10// mbstringmb_strtoupper('fòôbàř'); // 'FÒÔBÀŘ'mb_strlen('fòôbàř'); // '6'// Stringys('fòôbàř')->toUpperCase(); // 'FÒÔBÀŘ's('fòôbàř')->length(); // '6'
Composer を使用して依存関係を管理している場合は、composer.json ファイルに次の内容を含めることができます。
"require": {"danielstjules/stringy": "~3.1.0"}
次に、 composer update
またはphp composer.phar update
を実行した後、Composer の自動読み込みを使用してクラスをロードできます。
'vendor/autoload.php' が必要です。
それ以外の場合は、単にファイルを直接要求することもできます。
require_once 'パス/to/Stringy/src/Stringy.php';
いずれの場合も、エイリアスを使用することをお勧めします。
S として StringyStringy を使用します。
Stringy は、基礎となるマルチバイト サポートをmbstring
モジュールに依存していることに注意してください。モジュールが見つからない場合、Stringy は symfony/polyfill-mbstring を使用します。 ex-mbstring はデフォルトではありませんが、非常に一般的なモジュールです。たとえば、debian と ubuntu では、libapache2-mod-php5、php5-cli、および php5-fpm に含まれています。 OSX ユーザーの場合、これは homebrew とともにインストールされた PHP のすべてのバージョンのデフォルトです。 PHP を最初からコンパイルする場合は、 --enable-mbstring
フラグを含めることができます。
このライブラリは、以下に示すように、OO メソッド チェーンを提供します。
StringyStringy を S として使用します;echo S::create('fòôbàř')->collapseWhitespace()->swapCase(); // 'FÒÔ BÀŘ'
StringyStringy
には __toString() メソッドがあり、オブジェクトが文字列コンテキストで使用されるときに現在の文字列を返します。つまり、 (string) S::create('foo') // 'foo'
StringyStringy
IteratorAggregate
インターフェイスを実装します。これは、クラスのインスタンスでforeach
使用できることを意味します。
$stringy = S::create('fòôbàř');foreach ($stringy as $char) {echo $char; }// 'フォバシュ'
Countable
インターフェイスを実装し、 count()
を使用して文字列内の文字数を取得できるようにします。
$stringy = S::create('fòô');count($stringy); // 3
さらに、 ArrayAccess
インターフェイスが実装されました。その結果、 isset()
使用して、特定のインデックスに文字が存在するかどうかを確認できます。また、 StringyStringy
不変であるため、 offsetSet
またはoffsetUnset
を呼び出すと例外がスローされます。ただし、 offsetGet
実装されており、正と負の両方のインデックスを受け入れます。無効なインデックスの場合はOutOfBoundsException
が発生します。
$stringy = S::create('bàř');echo $stringy[2]; // 'ř'echo $stringy[-2]; // 'à'isset($stringy[-4]); // false$stringy[3]; // OutOfBoundsException$stringy[2] = 'a'; // 例外
PHP 5.6 以降、関数のインポートにuse function
できるようになりました。 Stringy はStringyStringy::create()
と同じ動作を行う名前空間関数Stringycreate
を公開します。 PHP 5.6 またはuse function
構文をサポートする別のランタイムを実行している場合は、以下に示すようにさらに単純な API を利用できます。
use function Stringycreate as s;// 代わりに: S::create('fòôbàř')s('fòôbàř')->collapseWhitespace()->swapCase();
「インスタンス メソッド」にリストされているすべてのメソッドは、静的ラッパーの一部として使用できます。 StaticStringy メソッドの場合、オプションのエンコーディングが最後の引数であることが想定されます。戻り値はキャストされないため、Stringy、integer、boolean などの型になります。
use StringyStaticStringy as S;// Stringy::create('fòôbàř')->slice(0, 3) に変換します;// 文字列 "fòô" を持つ Stringy オブジェクトを返しますS::slice('fòôbàř', 0, 3);
Stringy オブジェクトを作成し、str プロパティと encoding プロパティの両方に指定された値を割り当てます。 $str は割り当て前に文字列にキャストされ、$encoding が指定されていない場合は、デフォルトで mb_internal_encoding() が使用されます。次に、初期化されたオブジェクトを返します。最初の引数が __toString メソッドのない配列またはオブジェクトの場合、InvalidArgumentException をスローします。
$stringy = S::create('fòôbàř'); // 'フォバシュ'
文字列オブジェクトは不変です。以下のすべての例では、PHP 5.6 関数のインポートと PHP 5.4 の短い配列構文を利用しています。また、mb_internal_encoding() によって返されるエンコーディングが UTF-8 であると仮定します。詳細については、上記の create メソッドのドキュメントと、PHP 5.6 の作成に関する注意事項を参照してください。
$string が追加された新しい文字列を返します。
s('fòô')->append('bàř'); // 'フォバシュ'
$index の文字を 0 から始まるインデックスで返します。
s('fòôbàř')->at(3); // 'b'
$start と $end の間の部分文字列 (見つかった場合)、または空の文字列を返します。開始文字列の検索を開始するオフセットをオプションで指定できます。
s('{foo} と {bar}')->between('{', '}'); // 'ふー'
文字列のキャメルケース バージョンを返します。周囲のスペースをトリミングし、数字、スペース、ダッシュ、アンダースコアの後の文字を大文字にし、スペース、ダッシュ、アンダースコアを削除します。
s('キャメルケース')->camelize(); // 'キャメルケース'
文字列内の文字で構成される配列を返します。
s('fòôbàř')->chars(); // ['f', 'ò', 'ô', 'b', 'à', 'ř']
文字列をトリミングし、連続する空白文字を単一のスペースに置き換えます。これには、タブや改行文字に加え、シンスペースや表意文字スペースなどのマルチバイトの空白文字も含まれます。
s(' Ο συγγραφέας ')->collapseWhitespace(); // 'Ο συγγραφέας'
文字列に $needle が含まれる場合は true、それ以外の場合は false を返します。デフォルトでは、比較では大文字と小文字が区別されますが、$caseSensitive を false に設定することで比較を行わないようにすることができます。
s('Ο συγγραφέας είπε')->contains('συγγραφέας'); // 真実
文字列にすべての $needles が含まれる場合は true を返し、それ以外の場合は false を返します。デフォルトでは、比較では大文字と小文字が区別されますが、$caseSensitive を false に設定することで比較を行わないようにすることができます。
s('foo & bar')->containsAll(['foo', 'bar']); // 真実
文字列に $needles が含まれている場合は true を返し、それ以外の場合は false を返します。デフォルトでは、比較では大文字と小文字が区別されますが、$caseSensitive を false に設定することで比較を行わないようにすることができます。
s('str には foo が含まれます')->containsAny(['foo', 'bar']); // 真実
指定された文字列内の $substring の出現数を返します。デフォルトでは、比較では大文字と小文字が区別されますが、$caseSensitive を false に設定することで比較を行わないようにすることができます。
s('Ο συγγραφέας είπε')->countSubstr('α'); // 2
ダッシュで区切られた小文字のトリミングされた文字列を返します。ダッシュは、大文字の前 (文字列の最初の文字を除く)、およびスペースやアンダースコアの代わりに挿入されます。
s('fooBar')->dasherize(); // 'フーバー'
指定された区切り文字で区切られた小文字の文字列をトリミングして返します。区切り文字は、大文字 (文字列の最初の文字を除く) の前、およびスペース、ダッシュ、およびアンダースコアの代わりに挿入されます。英字区切り文字は小文字に変換されません。
s('fooBar')->delimit('::'); // 'foo::bar'
文字列が $substring で終わる場合は true、それ以外の場合は false を返します。デフォルトでは、比較では大文字と小文字が区別されますが、$caseSensitive を false に設定することで比較を行わないようにすることができます。
s('fòôbàř')->endsWith('bàř'); // 真実
文字列が $substrings のいずれかで終わる場合は true を返し、それ以外の場合は false を返します。デフォルトでは、比較では大文字と小文字が区別されますが、$caseSensitive を false に設定することで比較を行わないようにすることができます。
s('fòôbàř')->endsWithAny(['bàř', 'baz']); // 真実
文字列が $substring で始まることを確認します。そうでない場合は、先頭に追加されます。
s('foobar')->ensureLeft('http://'); // 'http://foobar'
文字列が $substring で終わるようにします。そうでない場合は追加されます。
s('foobar')->ensureRight('.com'); // 'foobar.com'
文字列の最初の $n 文字を返します。
s('fòôbàř')->first(3); // 'フォ'
Stringy オブジェクトによって使用されるエンコーディングを返します。
s('fòôbàř')->getEncoding(); // 'UTF-8'
文字列に小文字が含まれている場合は true を返し、そうでない場合は false を返します。
s('fòôbàř')->hasLowerCase(); // 真実
文字列に大文字が含まれている場合は true を返し、そうでない場合は false を返します。
s('fòôbàř')->hasUpperCase(); // 間違い
すべての HTML エンティティを該当する文字に変換します。 html_entity_decode のエイリアス。フラグのリストについては、http://php.net/manual/en/function.html-entity-decode.php を参照してください。
s('&')->htmlDecode(); // '&'
該当するすべての文字を HTML エンティティに変換します。 htmlentities のエイリアス。フラグのリストについては、http://php.net/manual/en/function.htmlentities.php を参照してください。
s('&')->htmlEncode(); // '&'
文字列の最初の単語を大文字にし、アンダースコアをスペースに置き換え、「_id」を削除します。
s('author_id')->humanize(); // '著者'
文字列内で最初に出現した $needle のインデックスを返し、見つからない場合は false を返します。検索を開始するオフセットをオプションで受け入れます。負のインデックスは最後から検索します
s('string')->indexOf('ing'); // 3
文字列内で最後に出現した $needle のインデックスを返し、見つからない場合は false を返します。検索を開始するオフセットをオプションで受け入れます。オフセットは、文字列の最後の文字から数えて負の値になる場合があります。
s('foobarfoo')->indexOfLast('foo'); // 10
指定された $index の文字列に $substring を挿入します。
s('fòôbř')->insert('à', 4); // 'フォバシュ'
文字列にアルファベットのみが含まれている場合は true を返し、そうでない場合は false を返します。
s('丹尼爾')->isAlpha(); // 真実
文字列にアルファベットと数字のみが含まれている場合は true を返し、それ以外の場合は false を返します。
s('دانيال1')->isAlphanumeric(); // 真実
文字列がbase64でエンコードされている場合はtrueを返し、それ以外の場合はfalseを返します。
s('Zm9vYmFy')->isBase64(); // 真実
文字列に空白文字のみが含まれている場合は true を返し、それ以外の場合は false を返します。
s("nt vf")->isBlank(); // 真実
文字列に 16 進数の文字のみが含まれている場合は true を返し、それ以外の場合は false を返します。
s('A102F')->is16 進数(); // 真実
文字列が JSON の場合は true、それ以外の場合は false を返します。 PHP 5.x の json_decode とは異なり、このメソッドは、空の文字列が有効な JSON とみなされないという点で、PHP 7 および他の JSON パーサーと一貫しています。
s('{"foo":"bar"}')->isJson(); // 真実
文字列に小文字のみが含まれている場合は true を返し、それ以外の場合は false を返します。
s('fòôbàř')->isLowerCase(); // 真実
文字列がシリアル化されている場合は true、そうでない場合は false を返します。
s('a:1:{s:3:"foo";s:3:"bar";}')->isSerialized(); // 真実
文字列に大文字のみが含まれている場合は true を返し、それ以外の場合は false を返します。
s('FÔBÀŘ')->isUpperCase(); // 真実
文字列の最後の $n 文字を返します。
s('fòôbàř')->last(3); // 'バー'
文字列の長さを返します。 PHP の mb_strlen() 関数のエイリアス。
s('fòôbàř')->length(); // 6
改行と復帰で分割し、文字列内の行に対応する Stringy オブジェクトの配列を返します。
s("fòôrnbàřn")->lines(); // ['fòô', 'bàř', '']
文字列と $otherStr の間の最長の共通プレフィックスを返します。
s('foobar')->longestCommonPrefix('foobar'); // 'フーバ'
文字列と $otherStr の間の最長の共通サフィックスを返します。
s('fòôbàř')->longestCommonSuffix('fòrbàř'); // 'バー'
文字列と $otherStr の間の最長の共通部分文字列を返します。同点の場合は、最初に発生したものを返します。
s('foobar')->longestCommonSubstring('boofar'); // 「おお」
指定された文字列の最初の文字を小文字に変換します。
s('Σ foo')-> lowerCaseFirst(); // 'σ foo'
$padStr を使用して文字列を指定された長さに埋め込みます。長さが文字列の長さ以下の場合、パディングは行われません。パディングに使用されるデフォルトの文字列はスペースで、デフォルトのタイプ (「left」、「right」、「both」のいずれか) は「right」です。 $padType がこれら 3 つの値のいずれでもない場合は、InvalidArgumentException をスローします。
s('fòôbàř')->pad(9, '-/', 'left'); // '-/-fòôbàř'
文字列 string の両側が埋め込まれた、指定された長さの新しい文字列を返します。 $padType が「both」の Pad() のエイリアス。
s('foo bar')->pad Both(9, ' '); // 'フーバー'
文字列の先頭が埋め込まれた、指定された長さの新しい文字列を返します。 $padType が「left」のpad() のエイリアス。
s('foo bar')->padLeft(9, ' '); // 'フーバー'
文字列の末尾が埋め込まれた、指定された長さの新しい文字列を返します。 $padType が「right」のpad() のエイリアス。
s('foo bar')->padRight(10, '_*'); // 'フーバー_*_'
$string で始まる新しい文字列を返します。
s('bàř')->prepend('fòô'); // 'フォバシュ'
$str 内のすべての $pattern を $replacement で置き換えます。 mb_ereg_replace() のエイリアス。 mb_ereg_replace() のマルチバイト パターンを含む 'i' オプションでは、正しい結果を得るために PHP 5.6 以降が必要であることに注意してください。これは、PHP 5.6 未満のバンドル バージョンの Oniguruma と、HHVM の現在のバージョン (3.8 以下) がサポートされていないためです。
s('fòô ')->regexReplace('f[òô]+s', 'bàř'); // 'bàř's('fò')->regexReplace('(ò)', '1ô'); // 'フォ'
プレフィックス $substring が存在する場合はそれを削除した新しい文字列を返します。
s('fòôbàř')->removeLeft('fòô'); // 'バー'
接尾辞 $substring が存在する場合はそれを削除した新しい文字列を返します。
s('fòôbàř')->removeRight('bàř'); // 'フォ'
乗数を指定して繰り返される文字列を返します。 str_repeat のエイリアス。
s('α')->repeat(3); // 'ααα'
$str 内のすべての $search を $replacement に置き換えます。
s('fòô bàř fòô bàř')->replace('fòô ', ''); // 'バシュバシュ'
反転した文字列を返します。 strrev() のマルチバイト バージョン。
s('fòôbàř')->reverse(); // 'ジャボフ'
文字列が単語を分割しないようにしながら、指定された長さに切り詰めます。 $substring が指定されており、切り詰めが発生した場合、文字列はさらに切り詰められ、必要な長さを超えずに部分文字列が追加されるようになります。
s('今日の予定は何ですか?')->safeTruncate(22, '...');// 'あなたの予定は何ですか...'
マルチバイトの str_shuffle() 関数。ランダムな順序で文字を含む文字列を返します。
s('fòôbàř')->shuffle(); // 'アオシュボフ'
文字列を URL スラッグに変換します。これには、非 ASCII 文字を最も近い ASCII 文字に置き換えること、残りの非 ASCII 文字および非英数字を削除すること、および空白を $replacement に置き換えることが含まれます。デフォルトでは単一のダッシュが置換され、文字列も小文字に変換されます。言語固有の音訳のために、ソース文字列の言語を指定することもできます。
s('fòô bàř のような文字列を使用する')->slugify(); // '文字列のような foo-bar を使用'
$start から始まり、$end で指定されたインデックスまでの部分文字列を返します ($end で指定されたインデックスは含みません)。 $end が省略された場合、関数は残りの文字列を抽出します。 $end が負の場合、文字列の末尾から計算されます。
s('fòôbàř')->slice(3, -1); // 'バ'
指定された正規表現で文字列を分割し、Stringy オブジェクトの配列を返します。オプションの整数 $limit を指定すると、結果が切り捨てられます。
s('foo,bar,baz')->split(',', 2); // ['foo', 'bar']
文字列が $substring で始まる場合は true、それ以外の場合は false を返します。デフォルトでは、比較では大文字と小文字が区別されますが、$caseSensitive を false に設定することで比較を行わないようにすることができます。
s('FÔbàřbaz')->startsWith('fòôbàř', false); // 真実
文字列が $substrings のいずれかで始まる場合は true を返し、それ以外の場合は false を返します。デフォルトでは、比較では大文字と小文字が区別されますが、$caseSensitive を false に設定することで比較を行わないようにすることができます。
s('FÔbàřbaz')->startsWithAny(['fòô', 'bàř'], false); // 真実
すべての空白文字を削除します。これには、タブや改行文字に加え、シンスペースや表意文字スペースなどのマルチバイトの空白文字も含まれます。
s(' Ο συγγραφέας ')->stripWhitespace(); // 'Οσυγγραφέας'
$start で始まり、指定された $length の部分文字列を返します。 $length に null を指定すると、空の文字列ではなく文字列の残りの部分が返されるという点で、mb_substr() 関数とは異なります。
s('fòôbàř')->substr(2, 3); // 'オバ'
文字列を指定された部分文字列で囲みます。
s(' ͜ ')->サラウンド('ʘ'); // 'ʘ ͜ ʘ'
文字列の大文字と小文字を交換したバージョンを返します。
s('Ντανιλ')->swapCase(); // 'νΤΑΝΙΛ'
Windows-1252 (Word 文書で一般的に使用される) のスマート引用符、省略記号、およびダッシュを、同等の ASCII 文字に置き換えた文字列を返します。
s('「なるほど…」')->tidy(); // '"なるほど..."'
各単語の最初の文字を大文字にしてトリミングされた文字列を返します。配列 $ignore も受け入れ、大文字にしない単語をリストできます。
$ignore = ['at', 'by', 'for', 'in', 'of', 'on', 'out', 'to', 'the'];s('私はテレビを見るのが好きです' )->titleize($ignore);// 'テレビを見るのが好きです'
文字列の ASCII バージョンを返します。一連の非 ASCII 文字は、最も近い ASCII 文字に置き換えられ、残りの文字はデフォルトで削除されます。ソース文字列の言語またはロケールは、en、en_GB、または en-GB のいずれかの形式で言語固有の音訳に指定できます。たとえば、「de」を渡すと、「äöü」は他の言語のような「aou」ではなく「aeoeue」にマッピングされます。
s('fòôbàř')->toAscii(); // 'foobar's('äöü')->toAscii(); // 'aou's('äöü')->toAscii('de'); // 'エオエウエ'
指定された論理文字列値のブール表現を返します。たとえば、「true」、「1」、「on」、および「yes」は true を返します。 「false」、「0」、「off」、および「no」は false を返します。すべての場合において、大文字と小文字は無視されます。他の数値文字列の場合、その符号によって戻り値が決まります。また、空白のみで構成される空文字列は false を返します。他のすべての文字列の場合、戻り値はブール キャストの結果です。
s('OFF')->toBoolean(); // 間違い
文字列内のすべての文字を小文字に変換します。 PHP の mb_strto lower() のエイリアス。
s('FÔBÀŘ')->toLowerCase(); // 'フォバシュ'
$tabLength で定義されているように、文字列内の各タブを特定の数のスペースに変換します。デフォルトでは、各タブは 4 つの連続するスペースに変換されます。
s(' String speech = "Hi"')->toSpaces(); // ' 文字列スピーチ = "こんにちは"'
$tabLength で定義されている、連続した数のスペースが出現するたびにタブに変換します。デフォルトでは、連続する 4 つのスペースはそれぞれタブに変換されます。
s(' fòô bàř')->toTabs();// ' fòô bàř'
文字列内の各単語の最初の文字を大文字に変換します。
s('fòôbàř')->toTitleCase(); // 'フォバシュ'
文字列内のすべての文字を大文字に変換します。 PHP の mb_strtoupper() のエイリアス。
s('fòôbàř')->toUpperCase(); // 'FÒÔBÀŘ'
文字列の先頭と末尾から空白を削除した文字列を返します。 Unicode 空白の削除をサポートします。デフォルトの代わりに削除するオプションの文字列を受け入れます。
s(' fòôbàř ')->trim(); // 'フォバシュ'
文字列の先頭から空白を削除した文字列を返します。 Unicode 空白の削除をサポートします。デフォルトの代わりに削除するオプションの文字列を受け入れます。
s(' fòôbàř ')->trimLeft(); // 'fòôbàř '
文字列の末尾から空白を削除した文字列を返します。 Unicode 空白の削除をサポートします。デフォルトの代わりに削除するオプションの文字列を受け入れます。
s(' fòôbàř ')->trimRight(); // 「フォバシュ」
文字列を指定された長さに切り詰めます。 $substring が指定されており、切り詰めが発生した場合、文字列はさらに切り詰められ、必要な長さを超えずに部分文字列が追加されるようになります。
s('今日の予定は何ですか?')->truncate(19, '...'); // 「ご要望は何ですか...」
アンダースコアで区切られた小文字のトリミングされた文字列を返します。アンダースコアは、大文字の前に (文字列の最初の文字を除く)、スペースやダッシュの代わりに挿入されます。
s('TestUCase')->アンダースコア付き(); // 'test_u_case'
指定された文字列の UpperCamelCase バージョンを返します。周囲のスペースをトリミングし、数字、スペース、ダッシュ、アンダースコアの後の文字を大文字にし、スペース、ダッシュ、アンダースコアを削除します。
s('アッパーキャメルケース')->upperCamelize(); // 'アッパーキャメルケース'
指定された文字列の最初の文字を大文字に変換します。
s('σ foo')->upperCaseFirst(); // 'Σフー'
以下は Stringy を拡張するライブラリのリストです。
SliceableStringy: PHP の Python に似た文字列スライス
SubStringy: 高度な部分文字列メソッド
プロジェクト ディレクトリから、 phpunit
を使用してテストを実行できます。
MIT ライセンスに基づいてリリースされています - 詳細については、 LICENSE.txt
参照してください。