Библиотека манипуляций со строками PHP с поддержкой многобайтности. Совместим с PHP 5.4+, PHP 7+ и HHVM.
s('string')->toTitleCase()->ensureRight('y') == 'Stringy'
Более старую документацию можно найти в ветке 1.x или ветке 2.x.
Почему?
Установка
ОО и цепочка
Реализованные интерфейсы
PHP 5.6 Создание
СтатическийСтягивающий
Методы класса
создавать
Методы экземпляра
добавить | в | между | верблюдствовать |
символы | свернутьПробелы | содержит | содержитВсе |
содержитЛюбой | countSubstr | разбить | разграничивать |
заканчивается с | заканчивается с любым | обеспечениеЛефт | обеспечитьправо |
первый | getEncoding | имеет нижний регистр | имеет верхний регистр |
htmlDecode | htmlEncode | очеловечивать | индексОф |
индексОфласт | вставлять | isAlpha | isбуквенно-цифровой |
isBase64 | isBlank | isшестнадцатеричный | isJson |
isLowerCase | isSerialized | isUpperCase | последний |
длина | линии | самый длинныйОбщийПрефикс | самый длинныйОбщийСуффикс |
самая длиннаяCommonSubstring | нижний регистр первый | подушечка | PadОба |
панель слева | панельПравая | добавить в начало | регулярное выражениеReplace |
удалитьлевый | удалитьправо | повторить | заменять |
обеспечить регресс | сейфУсечь | перетасовать | слизывать |
кусочек | расколоть | начинается с | начинается с любого |
полосаПробелы | подстр. | окружать | свопкейс |
аккуратный | присваивать титул | toAscii | toBoolean |
в нижний регистр | toSpaces | toTabs | toTitleCase |
toUpperCase | подрезать | обрезка влево | обрезкаПравый |
обрезать | подчеркнутый | верхняяCamelize | верхний регистр первый |
Расширения
Тесты
Лицензия
Частично из-за отсутствия поддержки многобайтов (включая UTF-8) во многих стандартных строковых функциях PHP. А также предложить объектно-ориентированную оболочку для многобайтовых функций модуля 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 для управления зависимостями, вы можете включить в файл композитора.json следующее:
"require": {"danielstjules/stringy": "~3.1.0"}
Затем, после запуска composer update
или php composer.phar update
, вы можете загрузить класс, используя автозагрузку Composer:
требуется «vendor/autoload.php»;
В противном случае вы можете просто запросить файл напрямую:
require_once 'путь/к/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, установленной с помощью homebrew. При компиляции PHP с нуля его можно включить с помощью флага --enable-mbstring
.
Библиотека предлагает цепочку объектно-ориентированных методов, как показано ниже:
используйте 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; }// '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]); // false$stringy[3]; // OutOfBoundsException$stringy[2] = 'a'; // Исключение
Начиная с PHP 5.6, use function
доступна для импорта функций. Stringy предоставляет функцию в пространстве имен Stringycreate
, которая выполняет то же поведение, что и StringyStringy::create()
. Если вы используете PHP 5.6 или другую среду выполнения, поддерживающую синтаксис use function
, вы можете воспользоваться еще более простым API, как показано ниже:
используйте функцию 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);// Возвращает объект Stringy со строкой "fòô"S::slice('fòôbàř', 0, 3);
Создает объект Stringy и присваивает свойствам str иcoding предоставленные значения. $str преобразуется в строку перед присвоением, и если $encoding не указан, по умолчанию используется mb_internal_encoding(). Затем он возвращает инициализированный объект. Вызывает исключение InvalidArgumentException, если первым аргументом является массив или объект без метода __toString.
$stringy = S::create('fòôbàř'); // 'фобарж'
Строковые объекты неизменяемы. Во всех примерах ниже используется импорт функций PHP 5.6 и синтаксис коротких массивов PHP 5.4. Они также предполагают, что кодировка, возвращаемая mb_internal_encoding(), — UTF-8. Более подробную информацию см. в документации по методу create выше, а также в примечаниях по созданию PHP 5.6.
Возвращает новую строку с добавленной $string.
s('foo')->append('bàř'); // 'фобарж'
Возвращает символ по адресу $index, индексы которого начинаются с 0.
s('fòôbàř')->at(3); // 'б'
Возвращает подстроку между $start и $end, если она найдена, или пустую строку. Может быть указано необязательное смещение, с которого можно начать поиск начальной строки.
s('{foo} и {bar}')->between('{', '}'); // 'фу'
Возвращает версию строки в верблюжьем регистре. Обрезает окружающие пробелы, делает заглавными буквы после цифр, пробелов, тире и подчеркиваний, а также удаляет пробелы, тире, а также подчеркивания.
s('Camel-Case')->camelize(); // 'верблюжий случай'
Возвращает массив, состоящий из символов строки.
s('fòôbàř')->chars(); // ['f', 'ò', 'ô', 'b', 'à', 'ř']
Обрезает строку и заменяет последовательные пробельные символы одним пробелом. Сюда входят символы табуляции и новой строки, а также многобайтовые пробелы, такие как тонкое пространство и идеографическое пространство.
s(' συγγραφέας ')->collapseWhitespace(); // 'О συγγραφέας'
Возвращает true, если строка содержит $needle, в противном случае — false. По умолчанию сравнение учитывает регистр, но его можно сделать нечувствительным, установив для $caseSensitive значение false.
s('О συγγραφέας είπε')->contains('συγγραφέας'); // истинный
Возвращает true, если строка содержит все $needles, в противном случае — false. По умолчанию сравнение учитывает регистр, но его можно сделать нечувствительным, установив для $caseSensitive значение false.
s('foo & bar')->containsAll(['foo', 'bar']); // истинный
Возвращает true, если строка содержит $needles, в противном случае — false. По умолчанию сравнение учитывает регистр, но его можно сделать нечувствительным, установив для $caseSensitive значение false.
s('str содержит foo')->containsAny(['foo', 'bar']); // истинный
Возвращает количество вхождений $substring в заданную строку. По умолчанию сравнение учитывает регистр, но его можно сделать нечувствительным, установив для $caseSensitive значение false.
s('0 συγγραφέας είπε')->countSubstr('α'); // 2
Возвращает строчную и обрезанную строку, разделенную дефисами. Тире вставляются перед символами верхнего регистра (за исключением первого символа строки), а также вместо пробелов и символов подчеркивания.
s('fooBar')->dasherize(); // 'фу-бар'
Возвращает обрезанную строку в нижнем регистре, разделенную заданным разделителем. Разделители вставляются перед символами верхнего регистра (за исключением первого символа строки), а также вместо пробелов, тире и подчеркиваний. Альфа-разделители не преобразуются в нижний регистр.
s('fooBar')->delimit('::'); // 'фу::бар'
Возвращает true, если строка заканчивается на $substring, в противном случае — false. По умолчанию сравнение учитывает регистр, но его можно сделать нечувствительным, установив для $caseSensitive значение false.
s('объем')->endsWith('барж'); // истинный
Возвращает true, если строка заканчивается любой из $substrings, в противном случае — false. По умолчанию сравнение учитывает регистр, но его можно сделать нечувствительным, установив для $caseSensitive значение false.
s('fòôbàř')->endsWithAny(['bàř', 'baz']); // истинный
Гарантирует, что строка начинается с $substring. Если это не так, оно добавляется.
s('foobar')->ensureLeft('http://'); // 'http://фубар'
Гарантирует, что строка заканчивается $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('строка')->indexOf('ing'); // 3
Возвращает индекс последнего вхождения $needle в строке и false, если не найден. Принимает необязательное смещение, с которого следует начать поиск. Смещения могут быть отрицательными, начиная с последнего символа в строке.
s('foobarfoo')->indexOfLast('foo'); // 10
Вставляет $substring в строку по указанному $index.
s('foôbř')->insert('à', 4); // 'фобарж'
Возвращает true, если строка содержит только буквенные символы, в противном случае — false.
s('丹尼爾')->isAlpha(); // истинный
Возвращает true, если строка содержит только буквенные и числовые символы, в противном случае — false.
s('دانيال1')->isAlphanumeric(); // истинный
Возвращает true, если строка имеет кодировку Base64, в противном случае — false.
s('Zm9vYmFy')->isBase64(); // истинный
Возвращает true, если строка содержит только пробельные символы, в противном случае — false.
s("nt vf")->isBlank(); // истинный
Возвращает true, если строка содержит только шестнадцатеричные символы, в противном случае — false.
s('A102F')->isHexadecimal(); // истинный
Возвращает true, если строка имеет формат JSON, и false в противном случае. В отличие от json_decode в PHP 5.x, этот метод совместим с 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(); // ['фо', 'барж', '']
Возвращает самый длинный общий префикс между строкой и $otherStr.
s('foobar')->longestCommonPrefix('foobaz'); // 'фуба'
Возвращает самый длинный общий суффикс между строкой и $otherStr.
s('fòôbàř')->longestCommonSuffix('fòôrbàř'); // 'бар'
Возвращает самую длинную общую подстроку между строкой и $otherStr. В случае связей возвращается то, что произошло первым.
s('foobar')->longestCommonSubstring('boofar'); // 'оо'
Преобразует первый символ предоставленной строки в нижний регистр.
s('Σ foo')->lowerCaseFirst(); // 'σ фу'
Дополняет строку до заданной длины с помощью $padStr. Если длина меньше или равна длине строки, заполнение не выполняется. Строка по умолчанию, используемая для заполнения, — это пробел, а тип по умолчанию (один из «левых», «правых», «оба») — «правый». Выдает исключение InvalidArgumentException, если $padType не является одним из этих трех значений.
s('fòôbàř')->pad(9, '-/', 'left'); // '-/-fôôbàř'
Возвращает новую строку заданной длины, в которой обе стороны строковой строки дополнены. Псевдоним для Pad() с $padType равным «both».
s('foo bar')->padBoth(9, ' '); // 'фу бар'
Возвращает новую строку заданной длины, в которой начало строки дополнено. Псевдоним для Pad() с $padType «left».
s('foo bar')->padLeft(9, ' '); // 'фу бар'
Возвращает новую строку заданной длины, конец которой дополнен. Псевдоним для Pad() с $padType равным «right».
s('foo bar')->padRight(10, '_*'); // 'фу бар_*_'
Возвращает новую строку, начинающуюся с $string.
s('барж')->prepend('fòô'); // 'фобарж'
Заменяет все вхождения $pattern в $str на $replacement. Псевдоним для mb_ereg_replace(). Обратите внимание, что для получения правильных результатов для опции «i» с многобайтовыми шаблонами в mb_ereg_replace() требуется PHP 5.6+. Это связано с отсутствием поддержки встроенной версии Oniguruma в PHP <5.6 и текущих версий HHVM (3.8 и ниже).
s('fòô ')->regexReplace('f[òô]+s', 'bàř'); // 'bàř's('fò')->regexReplace('(ò)', '1ô'); // 'фо'
Возвращает новую строку с удаленным префиксом $substring, если он присутствует.
s('fòôbàř')->removeLeft('fòô'); // 'бар'
Возвращает новую строку с удаленным суффиксом $substring, если он присутствует.
s('объем')->removeRight('барж'); // 'фо'
Возвращает повторяющуюся строку с заданным множителем. Псевдоним для str_repeat.
s('α')->repeat(3); // 'ααα'
Заменяет все вхождения $search в $str на $replacement.
s('foòô bàř fòô bàř')->replace('foô ', ''); // 'барж барж'
Возвращает перевернутую строку. Многобайтовая версия 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 отрицательное значение, оно вычисляется от конца строки.
s('fòôbàř')->slice(3, -1); // 'ба'
Разбивает строку с помощью предоставленного регулярного выражения, возвращая массив объектов Stringy. Необязательное целое число $limit усекает результаты.
s('foo,bar,baz')->split(',', 2); // ['фу', 'бар']
Возвращает true, если строка начинается с $substring, в противном случае — false. По умолчанию сравнение учитывает регистр, но его можно сделать нечувствительным, установив для $caseSensitive значение false.
s('FÒÔbàřbaz')->startsWith('fòôbàř', false); // истинный
Возвращает true, если строка начинается с любой из $substrings, в противном случае — false. По умолчанию сравнение учитывает регистр, но его можно сделать нечувствительным, установив для $caseSensitive значение false.
s('FÒÔbàřbaz')->startsWithAny(['fòô', 'bàř'], false); // истинный
Удалите все пробельные символы. Сюда входят символы табуляции и новой строки, а также многобайтовые пробелы, такие как тонкое пространство и идеографическое пространство.
s(' συγγραφέας ')->stripWhitespace(); // 'Οσυγγραφέας'
Возвращает подстроку, начинающуюся с $start, с указанной длиной $. Она отличается от функции mb_substr() тем, что если указать нулевую длину $, будет возвращена оставшаяся часть строки, а не пустая строка.
s('fòôbàř')->substr(2, 3); // 'оба'
Окружает строку заданной подстрокой.
s(' ͜ ')->surround('ʘ'); // 'ʘ ͜ ʘ'
Возвращает версию строки с заменой регистра.
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» приводит к преобразованию «äöü» в «aeoeue», а не в «aou», как в других языках.
s('fòôbàř')->toAscii(); // 'foobar's('äöü')->toAscii(); // 'aou's('äöü')->toAscii('de'); // 'аэоеу'
Возвращает логическое представление заданного значения логической строки. Например, «истина», «1», «вкл» и «да» вернут истину. «ложь», «0», «выкл» и «нет» вернут ложь. Во всех случаях регистр игнорируется. Для других числовых строк их знак будет определять возвращаемое значение. Кроме того, пустые строки, состоящие только из пробелов, будут возвращать значение false. Для всех остальных строк возвращаемое значение является результатом логического приведения.
s('OFF')->toBoolean(); // ЛОЖЬ
Преобразует все символы строки в нижний регистр. Псевдоним PHP mb_strtolower().
s('FÒÔBÀŘ')->toLowerCase(); // 'фобарж'
Преобразует каждую табуляцию в строке в некоторое количество пробелов, определенное в $tabLength. По умолчанию каждая табуляция преобразуется в 4 последовательных пробела.
s(' String voice = "Hi"')->toSpaces(); // 'Строка речи = "Привет"'
Преобразует каждое вхождение некоторого последовательного количества пробелов, определенного в $tabLength, в табуляцию. По умолчанию каждые 4 последовательных пробела преобразуются в табуляцию.
s('для выбора')->toTabs();// 'для выбора'
Преобразует первый символ каждого слова в строке в верхний регистр.
s('fòô bàř')->toTitleCase(); // 'Фо Барж'
Преобразует все символы строки в верхний регистр. Псевдоним PHP mb_strtoupper().
s('fòôbàř')->toUpperCase(); // 'ФОТБА'
Возвращает строку, из начала и конца которой удалены пробелы. Поддерживает удаление пробелов в Юникоде. Принимает необязательную строку символов для удаления вместо значений по умолчанию.
s('обработка')->trim(); // 'фобарж'
Возвращает строку, в начале которой удалены пробелы. Поддерживает удаление пробелов в Юникоде. Принимает необязательную строку символов для удаления вместо значений по умолчанию.
s('fòôbàř')->trimLeft(); // 'fôbàř'
Возвращает строку, в конце которой удалены пробелы. Поддерживает удаление пробелов в Юникоде. Принимает необязательную строку символов для удаления вместо значений по умолчанию.
s('fòôbàř')->trimRight(); // 'fôbàř'
Усекает строку до заданной длины. Если указана $substring и происходит усечение, строка усекается дополнительно, чтобы можно было добавить подстроку, не превышая желаемую длину.
s('Какие планы на сегодня?')->truncate(19, '...'); // 'Каков ваш пл...'
Возвращает строчную и обрезанную строку, разделенную подчеркиванием. Символы подчеркивания вставляются перед символами верхнего регистра (за исключением первого символа строки), а также вместо пробелов и тире.
s('TestUCase')->подчеркнуто(); // 'test_u_case'
Возвращает версию предоставленной строки в UpperCamelCase. Он обрезает окружающие пробелы, делает заглавными буквы после цифр, пробелов, тире и подчеркиваний, а также удаляет пробелы, тире и подчеркивания.
s('Верхний Camel-Case')->upperCamelize(); // 'UpperCamelCase'
Преобразует первый символ предоставленной строки в верхний регистр.
s('σ foo')->upperCaseFirst(); // 'Σ фу'
Ниже приведен список библиотек, расширяющих Stringy:
SliceableStringy: фрагменты строк в PHP в стиле Python.
SubStringy: расширенные методы подстроки
Из каталога проекта тесты можно запускать с помощью phpunit
Выпущено под лицензией MIT — подробности см. LICENSE.txt
.