具有多位元組支援的 PHP 字串操作庫。與 PHP 5.4+、PHP 7+ 和 HHVM 相容。
s('string')->toTitleCase()->ensureRight('y') == 'Stringy'
請參閱 1.x 分支或 2.x 分支以取得較舊的文件。
為什麼?
安裝
物件導向和連結
實現的介面
PHP 5.6 創建
靜態弦線
類別方法
創造
實例方法
附加 | 在 | 之間 | 駱駝化 |
字元 | 折疊空白 | 包含 | 包含全部 |
包含任何 | 計數子字串 | 達舍爾化 | 劃界 |
結束於 | 以任意結尾 | 確保左 | 確保權利 |
第一的 | 取得編碼 | 有小寫 | 有大寫 |
html解碼 | html編碼 | 人性化 | 索引 |
最後索引 | 插入 | 是阿爾法 | 是字母數字 |
是Base64 | 為空白 | 是十六進位 | 伊森 |
是小寫 | 已序列化 | 是大寫 | 最後的 |
長度 | 線 | 最長公共前綴 | 最長公共後綴 |
最長公共子串 | 小寫第一 | 軟墊 | 墊兩者 |
墊左 | 右鍵盤 | 前置 | 正規表示式替換 |
刪除左 | 刪除右 | 重複 | 代替 |
反向 | 安全截斷 | 隨機播放 | slugify |
片 | 分裂 | 開始於 | 以任何開頭 |
去除空白 | 子字串 | 環繞 | 交換案例 |
整齊的 | 賦予標題 | 轉 Ascii | 到布林值 |
轉為小寫 | 到空間 | 標籤頁 | 標題大小寫 |
改為大寫 | 修剪 | 向左修剪 | 右修剪 |
截短 | 底線 | 上駱駝化 | 大寫優先 |
擴充
測試
執照
部分原因是許多 PHP 標準字串函數缺乏多位元組支援(包括 UTF-8)。而且也為mbstring
模組的多位元組相容函數提供物件導向的包裝器。 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 的自動載入來載入該類別:
需要“供應商/autoload.php”;
否則,您可以直接直接請求該文件:
require_once 'path/to/Stringy/src/Stringy.php';
無論哪種情況,我都建議使用別名。
使用 StringyStringy 作為 S;
請注意,Stringy 依賴mbstring
模組來實現其底層多位元組支援。如果找不到該模組,Stringy 將使用 symfony/polyfill-mbstring。 ex-mbstring 是一個非預設但非常常見的模組。例如,對於 debian 和 ubuntu,它包含在 libapache2-mod-php5、php5-cli 和 php5-fpm 中。對於 OSX 用戶,這是與自製程式一起安裝的任何 PHP 版本的預設設定。如果從頭開始編譯 PHP,則可以將其包含在--enable-mbstring
標誌中。
該庫提供了 OO 方法鏈接,如下所示:
use StringyStringy as 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; }// 'fòôbàř'
它實作了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]); // 假$stringy[3]; // OutOfBoundsException$stringy[2] = 'a'; // 例外
從 PHP 5.6 開始, use function
可用來導入函數。 Stringy 公開了一個命名空間函數Stringycreate
,它發出與StringyStringy::create()
相同的行為。如果執行 PHP 5.6 或其他支援use function
語法的執行時,您可以利用更簡單的 API,如下所示:
use function Stringycreate as s;// 而非: S::create('fòô bàř')s('fòô bàř')->collapseWhitespace()->swapCase();
“實例方法”下列出的所有方法都可以作為靜態包裝器的一部分使用。對於 StaticStringy 方法,可選編碼應為最後一個參數。傳回值未進行強制轉換,因此可能是 Stringy、整數、布林值等類型。
use StringyStaticStringy as S;// 轉換為Stringy::create('fòbàř')->slice(0, 3);// 傳回帶有字串「fòô」的Stringy 物件S::slice('fòôbàř', 0 , 3);
建立 Stringy 物件並將 str 和編碼屬性指派給提供的值。 $str 在賦值之前被轉換為字串,如果未指定 $encoding,則預設為 mb_internal_encoding()。然後它會傳回初始化的物件。如果第一個參數是沒有 __toString 方法的陣列或對象,則拋出 InvalidArgumentException。
$stringy = S::create('fòbàř'); // 'fòôbàř'
字串物件是不可變的。下面的所有範例都使用 PHP 5.6 函數匯入和 PHP 5.4 短數組語法。他們也假設 mb_internal_encoding() 回傳的編碼是 UTF-8。有關更多詳細信息,請參閱上面 create 方法的文檔,以及有關 PHP 5.6 創建的註釋。
傳回附加了 $string 的新字串。
s('fòô')->append('bàř'); // 'fòô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(); // 'foo-bar'
傳回由給定分隔符號分隔的小寫且經過修剪的字串。分隔符號插入在大寫字元之前(字串的第一個字元除外),並取代空格、破折號和底線。 Alpha 分隔符號不會轉換為小寫。
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); // 'fò'
傳回 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')->人性化(); // '作者'
傳回字串中第一次出現 $needle 的索引,如果找不到則傳回 false。接受一個可選的偏移量,從該偏移量開始搜尋。負索引從末尾開始搜索
s('字串')->indexOf('ing'); // 3
傳回字串中最後一次出現 $needle 的索引,如果找不到則傳回 false。接受一個可選的偏移量,從該偏移量開始搜尋。從字串中的最後一個字元開始計數,偏移量可能為負數。
s('foobarfoo')->indexOfLast('foo'); // 10
將 $substring 插入到提供的 $index 處的字串中。
s('fòbř')->insert('à', 4); // 'fòôbàř'
如果字串僅包含字母字符,則傳回 true,否則傳回 false。
s('丹尼爾')->isAlpha(); // 真的
如果字串僅包含字母和數字字符,則傳回 true,否則傳回 false。
s('迪亞尼雅1')->isAlphanumeric(); // 真的
如果字串採用 Base64 編碼,則傳回 true,否則傳回 false。
s('Zm9vYmFy')->isBase64(); // 真的
如果字串僅包含空白字符,則傳回 true,否則傳回 false。
s("nt vf")->isBlank(); // 真的
如果字串僅包含十六進位字符,則傳回 true,否則傳回 false。
s('A102F')->isHexadecimal(); // 真的
如果字串是 JSON,則傳回 true,否則傳回 false。與 PHP 5.x 中的 json_decode 不同,此方法與 PHP 7 和其他 JSON 解析器一致,因為空字串不被視為有效的 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('foobaz'); // '富巴'
傳回字串和 $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, '-/', '左'); // '-/-fòbàř'
傳回給定長度的新字串,使得字串 string 的兩側都被填滿。 $padType 為「both」的 pad() 的別名。
s('foo bar')->padBoth(9, ' '); // ' foo 酒吧 '
傳回給定長度的新字串,以便填滿字串的開頭。 $padType 為 'left' 的 pad() 的別名。
s('foo bar')->padLeft(9, ' '); // 'foo 酒吧'
傳回給定長度的新字串,以便填充字串的末尾。 $padType 為 'right' 的 pad() 的別名。
s('foo bar')->padRight(10, '_*'); // 'foo bar_*_'
傳回以 $string 開頭的新字串。
s('bàř')->prepend('fòô'); // 'fòbàř'
將 $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ô'); // 'fò'
傳回刪除前綴 $substring(如果存在)的新字串。
s('fòbàř')->removeLeft('fòô'); // '酒吧'
傳回刪除後綴 $substring(如果存在)的新字串。
s('fòbàř')->removeRight('bàř'); // 'fò'
傳回給定乘數的重複字串。 str_repeat 的別名。
s('α')->重複(3); // 'ααα'
將 $str 中所有出現的 $search 替換為 $replacement。
s('fò bàř fòô bàř')->replace('fò ', ''); // '巴巴巴'
傳回一個反轉的字串。 strrev() 的多位元組版本。
s('fòbàř')->reverse(); // 'řàbôòf'
將字串截斷為給定長度,同時確保它不會拆分單字。如果提供了 $substring,並且發生截斷,則該字串將進一步截斷,以便可以附加子字串而不超過所需的長度。
s('你今天有什麼計劃?')->safeTruncate(22, '...');// '你今天有什麼計劃...'
多位元組 str_shuffle() 函數。它傳回一個字串,其中的字元按隨機順序排列。
s('fòbàř')->shuffle(); // 'àôřbòf'
將字串轉換為 URL slug。這包括用最接近的 ASCII 等效項替換非 ASCII 字元、刪除剩餘的非 ASCII 和非字母數字字元以及用 $replacement 替換空格。替換預設為單一破折號,並且字串也轉換為小寫。也可以提供來源字串的語言以進行特定於語言的音譯。
s('使用像 fòô bàř 這樣的字串')->slugify(); // 'using-strings-like-foo-bar'
傳回從 $start 開始一直到 $end 指定的索引的子字串,但不包含 $end 指定的索引。如果省略 $end,則函數將提取剩餘的字串。如果 $end 為負數,則從字串末尾開始計算。
s('fòbàř')->slice(3, -1); // '巴'
使用提供的正規表示式拆分字串,傳回 Stringy 物件的陣列。可選的整數 $limit 將截斷結果。
s('foo,bar,baz')->split(',', 2); // ['foo', '酒吧']
如果字串以 $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 的子字串。它與 mb_substr() 函數的不同之處在於,提供 null 的 $length 將傳回字串的其餘部分,而不是空字串。
s('fòbàř')->substr(2, 3); // '奧巴'
用給定的子字串包圍字串。
s(' ͜ ')->surround('ʘ'); // 'ʘ ͜ ʘ'
傳回字串的大小寫交換版本。
s('NTανιλ')->swapCase(); // 'VATANNIΛ'
傳回一個字串,其中包含來自 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”會導致“äöü”映射到“aeoeue”,而不是像其他語言中的“aou”。
s('fòbàř')->toAscii(); // 'foobar's('äöü')->toAscii(); // 'aou's('äöü')->toAscii('de'); // 'aeoeue'
傳回給定邏輯字串值的布林表示形式。例如,「true」、「1」、「on」和「yes」將傳回 true。 'false'、'0'、'off' 和 'no' 將會回傳 false。在所有情況下,都會忽略大小寫。對於其他數字字串,它們的符號將決定傳回值。此外,僅由空格組成的空白字串將傳回 false。對於所有其他字串,傳回值是布林轉換的結果。
s('OFF')->toBoolean(); // 錯誤的
將字串中的所有字元轉換為小寫。 PHP mb_strtolower() 的別名。
s('FÒÔBÀŘ')->toLowerCase(); // 'fòbàř'
將字串中的每個製表符轉換為一定數量的空格,如 $tabLength 所定義。預設情況下,每個製表符都會轉換為 4 個連續的空格。
s('字串語音 = "Hi"')->toSpaces(); // ' 字串語音 = "Hi"'
將每次出現的某些連續空格數(由 $tabLength 定義)轉換為製表符。預設情況下,每 4 個連續空格都會轉換為一個製表符。
s('fòôbàř')->toTabs();//'fòôbàř'
將字串中每個單字的第一個字元轉換為大寫。
s('fò bàř')->toTitleCase(); // 'FòôBàř'
將字串中的所有字元轉換為大寫。 PHP mb_strtoupper() 的別名。
s('fòbàř')->toUpperCase(); // 'FÒÔBÀŘ'
傳回從字串開頭和結尾刪除空格的字串。支援刪除 unicode 空格。接受要剝離的可選字串而不是預設字串。
s('fòbàř')->trim(); // 'fòbàř'
傳回從字串開頭刪除空格的字串。支援刪除 unicode 空格。接受要剝離的可選字串而不是預設字串。
s('fòbàř')->trimLeft(); // 'fòôbàř '
傳回從字串末尾刪除空格的字串。支援刪除 unicode 空格。接受要剝離的可選字串而不是預設字串。
s('fòbàř')->trimRight(); // 'fòbàř'
將字串截斷為給定長度。如果提供了 $substring,並且發生截斷,則該字串將進一步截斷,以便可以附加子字串而不超過所需的長度。
s('你今天有什麼計畫?')->truncate(19, '...'); // '你有什麼計畫...'
傳回由下劃線分隔的小寫且經過修剪的字串。底線插入在大寫字元之前(字串的第一個字元除外),並取代空格和破折號。
s('TestUCase')->底線(); // 'test_u_case'
傳回所提供字串的大駝峰版本。它修剪周圍的空格,將數字、空格、破折號和底線後面的字母大寫,並刪除空格、破折號、底線。
s('大駝峰式大小寫')->upperCamelize(); // '大駝峰式'
將提供的字串的第一個字元轉換為大寫。
s('σ foo')->upperCaseFirst(); // 'Σ foo'
以下是擴充 Stringy 的庫列表:
SliceableStringy:PHP 中類似 Python 的字串切片
SubStringy:高階子字串方法
在專案目錄中,可以使用phpunit
運行測試
根據 MIT 許可證發布 - 有關詳細信息,請參閱LICENSE.txt
。