Uma biblioteca de manipulação de strings PHP com suporte multibyte. Compatível com PHP 5.4+, PHP 7+ e HHVM.
s('string')->toTitleCase()->ensureRight('y') == 'Stringy'
Consulte a ramificação 1.x ou ramificação 2.x para documentação mais antiga.
Por que?
Instalação
OO e encadeamento
Interfaces Implementadas
Criação do PHP 5.6
EstáticoStringy
Métodos de classe
criar
Métodos de instância
acrescentar | no | entre | camelizar |
caracteres | recolherWhitespace | contém | contém tudo |
contém qualquer | contagemSubstr | dasherizar | delimitar |
terminaCom | termina com qualquer | garantirEsquerda | garantirCerto |
primeiro | getEncoding | temLowerCase | temUpperCase |
htmlDecodificar | htmlEncode | humanizar | indexOf |
indexOfLast | inserir | éAlfa | é alfanumérico |
isBase64 | está em branco | é hexadecimal | éJson |
isLowerCase | éSerializado | isUpperCase | durar |
comprimento | linhas | mais longoCommonPrefix | mais longoCommonSuffix |
mais longaCommonSubstring | lowerCaseFirst | almofada | padAmbos |
padLeft | padRight | acrescentar | regexSubstituir |
removerEsquerda | removerDireito | repita | substituir |
reverter | seguroTruncate | embaralhar | slugificar |
fatiar | dividir | começaCom | começaComAny |
stripWhitespace | substrato | cercar | swapCase |
limpo | titular | paraAscii | toBoolean |
para LowerCase | para espaços | para guias | toTitleCase |
para Maiúsculas | aparar | aparar à esquerda | aparar à direita |
truncar | sublinhado | superiorCamelize | maiúsculaPrimeiro |
Extensões
Testes
Licença
Em parte devido à falta de suporte multibyte (incluindo UTF-8) em muitas das funções de string padrão do PHP. Mas também para oferecer um wrapper OO em torno das funções compatíveis com multibyte do módulo mbstring
. Stringy lida com algumas peculiaridades, fornece funcionalidades adicionais e esperançosamente torna as strings um pouco mais fáceis de trabalhar!
// Biblioteca padrãostrtoupper('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àř')->comprimento(); // '6'
Se estiver usando o Composer para gerenciar dependências, você pode incluir o seguinte em seu arquivo compositor.json:
"require": {"danielstjules/stringy": "~3.1.0"}
Então, após executar composer update
ou php composer.phar update
, você pode carregar a classe usando o carregamento automático do Composer:
requer 'vendor/autoload.php';
Caso contrário, você pode simplesmente solicitar o arquivo diretamente:
require_once 'caminho/para/Stringy/src/Stringy.php';
E em ambos os casos, sugiro usar um alias.
use StringyStringy como S;
Observe que Stringy depende do módulo mbstring
para seu suporte multibyte subjacente. Se o módulo não for encontrado, Stringy usará symfony/polyfill-mbstring. ex-mbstring é um módulo não padrão, mas muito comum. Por exemplo, com Debian e Ubuntu, está incluído em libapache2-mod-php5, php5-cli e php5-fpm. Para usuários do OSX, é o padrão para qualquer versão do PHP instalada com o homebrew. Se estiver compilando o PHP do zero, ele pode ser incluído com o sinalizador --enable-mbstring
.
A biblioteca oferece encadeamento de métodos OO, conforme visto abaixo:
use StringyStringy como S;echo S::create('fòô bàř')->collapseWhitespace()->swapCase(); // 'FÒÔ BÀŘ'
StringyStringy
possui um método __toString(), que retorna a string atual quando o objeto é usado em um contexto de string, ou seja: (string) S::create('foo') // 'foo'
StringyStringy
implementa a interface IteratorAggregate
, o que significa que foreach
pode ser usado com uma instância da classe:
$stringy = S::create('fòôbàř');foreach ($stringy as $char) {echo $char; }// 'fòôbàř'
Ele implementa a interface Countable
, permitindo o uso de count()
para recuperar o número de caracteres na string:
$stringy = S::create('fòô');count($stringy); //3
Além disso, a interface ArrayAccess
foi implementada. Como resultado, isset()
pode ser usado para verificar se existe um caractere em um índice específico. E como StringyStringy
é imutável, qualquer chamada para offsetSet
ou offsetUnset
lançará uma exceção. offsetGet
foi implementado, entretanto, e aceita índices positivos e negativos. Índices inválidos resultam em OutOfBoundsException
.
$stringy = S::create('bàř');echo $stringy[2]; // 'ř'echo $stringy[-2]; // 'à'isset($stringy[-4]); // false$stringy[3]; //OutOfBoundsException$stringy[2] = 'a'; // Exceção
A partir do PHP 5.6, use function
está disponível para importar funções. Stringy expõe uma função com namespace, Stringycreate
, que emite o mesmo comportamento que StringyStringy::create()
. Se estiver executando o PHP 5.6 ou outro tempo de execução que suporte a sintaxe use function
, você pode aproveitar as vantagens de uma API ainda mais simples, conforme mostrado abaixo:
use a função Stringycreate como s;// Em vez de: S::create('fòô bàř')s('fòô bàř')->collapseWhitespace()->swapCase();
Todos os métodos listados em "Métodos de instância" estão disponíveis como parte de um wrapper estático. Para métodos StaticStringy, espera-se que a codificação opcional seja o último argumento. O valor de retorno não é convertido e pode, portanto, ser do tipo Stringy, inteiro, booleano, etc.
use StringyStaticStringy como S;// Traduz para Stringy::create('fòôbàř')->slice(0, 3);// Retorna um objeto Stringy com a string "fòô"S::slice('fòôbàř', 0, 3);
Cria um objeto Stringy e atribui as propriedades str e encoding aos valores fornecidos. $str é convertido em uma string antes da atribuição e se $encoding não for especificado, o padrão é mb_internal_encoding(). Em seguida, ele retorna o objeto inicializado. Lança uma InvalidArgumentException se o primeiro argumento for uma matriz ou objeto sem um método __toString.
$stringy = S::create('fòôbàř'); // 'fòôbàř'
Objetos stringy são imutáveis. Todos os exemplos abaixo fazem uso da importação de funções do PHP 5.6 e da sintaxe de array curto do PHP 5.4. Eles também assumem que a codificação retornada por mb_internal_encoding() é UTF-8. Para mais detalhes, veja a documentação do método create acima, bem como as notas sobre a criação do PHP 5.6.
Retorna uma nova string com $string anexado.
s('fòô')->append('bàř'); // 'fòôbàř'
Retorna o caractere $index, com índices começando em 0.
s('fòôbàř')->at(3); // 'b'
Retorna a substring entre $start e $end, se encontrada, ou uma string vazia. Um deslocamento opcional pode ser fornecido para iniciar a busca pela string inicial.
s('{foo} e {bar}')->between('{', '}'); // 'foo'
Retorna uma versão camelCase da string. Apara espaços circundantes, coloca letras em maiúscula após dígitos, espaços, travessões e sublinhados e remove espaços, travessões e sublinhados.
s('Camel-Case')->camelize(); // 'cameloCase'
Retorna uma matriz que consiste nos caracteres da string.
s('fòôbàř')->chars(); // ['f', 'ò', 'ô', 'b', 'à', 'ř']
Corta a string e substitui caracteres de espaço em branco consecutivos por um único espaço. Isso inclui tabulações e caracteres de nova linha, bem como espaços em branco multibyte, como espaço fino e espaço ideográfico.
s(' Ο συγγραφέας ')->collapseWhitespace(); // 'Ο συγγραφέας'
Retorna verdadeiro se a string contiver $needle, caso contrário, falso. Por padrão, a comparação diferencia maiúsculas de minúsculas, mas pode se tornar insensível definindo $caseSensitive como false.
s('Ο συγγραφέας είπε')->contém('συγγραφέας'); // verdadeiro
Retorna verdadeiro se a string contiver todos os $needles, caso contrário, retorna falso. Por padrão, a comparação diferencia maiúsculas de minúsculas, mas pode se tornar insensível definindo $caseSensitive como false.
s('foo & bar')->containsAll(['foo', 'bar']); // verdadeiro
Retorna verdadeiro se a string contém $needles, caso contrário, falso. Por padrão, a comparação diferencia maiúsculas de minúsculas, mas pode se tornar insensível definindo $caseSensitive como false.
s('str contém foo')->containsAny(['foo', 'bar']); // verdadeiro
Retorna o número de ocorrências de $substring na string fornecida. Por padrão, a comparação diferencia maiúsculas de minúsculas, mas pode se tornar insensível definindo $caseSensitive como false.
s('Ο συγγραφέας είπε')->countSubstr('α'); //2
Retorna uma string minúscula e aparada separada por travessões. Traços são inseridos antes dos caracteres maiúsculos (com exceção do primeiro caractere da string) e no lugar dos espaços e também dos sublinhados.
s('fooBar')->dasherize(); // 'foo-bar'
Retorna uma string minúscula e aparada separada pelo delimitador fornecido. Os delimitadores são inseridos antes dos caracteres maiúsculos (com exceção do primeiro caractere da string) e no lugar de espaços, travessões e sublinhados. Os delimitadores alfa não são convertidos em letras minúsculas.
s('fooBar')->delimit('::'); // 'foo::bar'
Retorna verdadeiro se a string terminar com $substring, caso contrário, retorna falso. Por padrão, a comparação diferencia maiúsculas de minúsculas, mas pode se tornar insensível definindo $caseSensitive como false.
s('fòôbàř')->endsWith('bàř'); // verdadeiro
Retorna verdadeiro se a string terminar com qualquer uma das $substrings, caso contrário, retorna falso. Por padrão, a comparação diferencia maiúsculas de minúsculas, mas pode se tornar insensível definindo $caseSensitive como false.
s('fòôbàř')->endsWithAny(['bàř', 'baz']); // verdadeiro
Garante que a string comece com $substring. Caso contrário, será anexado.
s('foobar')->ensureLeft('http://'); // 'http://foobar'
Garante que a string termine com $substring. Caso contrário, será anexado.
s('foobar')->ensureRight('.com'); // 'foobar.com'
Retorna os primeiros $n caracteres da string.
s('fòôbàř')->primeiro(3); // 'fòô'
Retorna a codificação usada pelo objeto Stringy.
s('fòôbàř')->getEncoding(); //'UTF-8'
Retorna verdadeiro se a string contiver um caractere minúsculo, caso contrário, retorna falso.
s('fòôbàř')->hasLowerCase(); // verdadeiro
Retorna verdadeiro se a string contiver um caractere maiúsculo, caso contrário, retorna falso.
s('fòôbàř')->hasUpperCase(); // falso
Converta todas as entidades HTML em seus caracteres aplicáveis. Um alias de html_entity_decode. Para obter uma lista de sinalizadores, consulte http://php.net/manual/en/function.html-entity-decode.php
s('&')->htmlDecode(); // '&'
Converta todos os caracteres aplicáveis em entidades HTML. Um alias de htmlentities. Consulte http://php.net/manual/en/function.htmlentities.php para obter uma lista de sinalizadores.
s('&')->htmlEncode(); // '&'
Coloca a primeira palavra da string em maiúscula, substitui sublinhados por espaços e remove '_id'.
s('author_id')->humanizar(); // 'Autor'
Retorna o índice da primeira ocorrência de $needle na string e false se não for encontrado. Aceita um deslocamento opcional a partir do qual iniciar a pesquisa. Um índice negativo pesquisa a partir do final
s('string')->indexOf('ing'); //3
Retorna o índice da última ocorrência de $needle na string e false se não for encontrado. Aceita um deslocamento opcional a partir do qual iniciar a pesquisa. Os deslocamentos podem ser negativos para contar a partir do último caractere da string.
s('foobarfoo')->indexOfLast('foo'); //10
Insere $substring na string no $index fornecido.
s('fòôbř')->inserir('à', 4); // 'fòôbàř'
Retorna verdadeiro se a string contiver apenas caracteres alfabéticos; caso contrário, retorna falso.
s('丹尼爾')->isAlpha(); // verdadeiro
Retorna verdadeiro se a string contém apenas caracteres alfabéticos e numéricos; caso contrário, retorna falso.
s('دانيال1')->isAlfanumeric(); // verdadeiro
Retorna verdadeiro se a string for codificada em base64, caso contrário, retorna falso.
s('Zm9vYmFy')->isBase64(); // verdadeiro
Retorna verdadeiro se a string contiver apenas caracteres de espaço em branco; caso contrário, retorna falso.
s("nt vf")->isBlank(); // verdadeiro
Retorna verdadeiro se a string contiver apenas caracteres hexadecimais; caso contrário, retorna falso.
s('A102F')->isHexadecimal(); // verdadeiro
Retorna verdadeiro se a string for JSON, caso contrário, falso. Ao contrário do json_decode no PHP 5.x, este método é consistente com o PHP 7 e outros analisadores JSON, pois uma string vazia não é considerada JSON válida.
s('{"foo":"bar"}')->isJson(); // verdadeiro
Retorna verdadeiro se a string contiver apenas caracteres minúsculos; caso contrário, retorna falso.
s('fòôbàř')->isLowerCase(); // verdadeiro
Retorna verdadeiro se a string for serializada, caso contrário, retorna falso.
s('a:1:{s:3:"foo";s:3:"bar";}')->isSerialized(); // verdadeiro
Retorna verdadeiro se a string contiver apenas caracteres maiúsculos, caso contrário, retorna falso.
s('FÒÔBÀŘ')->isUpperCase(); // verdadeiro
Retorna os últimos $n caracteres da string.
s('fòôbàř')->último(3); // 'bar'
Retorna o comprimento da string. Um alias para a função mb_strlen() do PHP.
s('fòôbàř')->length(); //6
Divide em novas linhas e retornos de carro, retornando uma matriz de objetos Stringy correspondentes às linhas da string.
s("fòôrnbàřn")->linhas(); // ['fòô', 'bàř', '']
Retorna o prefixo comum mais longo entre a string e $otherStr.
s('foobar')->longestCommonPrefix('foobaz'); // 'fooba'
Retorna o sufixo comum mais longo entre a string e $otherStr.
s('fòôbàř')->longestCommonSuffix('fòrbàř'); // 'bar'
Retorna a substring comum mais longa entre a string e $otherStr. No caso de empate, retorna o que ocorre primeiro.
s('foobar')->longestCommonSubstring('boofar'); // 'oo'
Converte o primeiro caractere da string fornecida em minúsculas.
s('Σ foo')->lowerCaseFirst(); // 'σ foo'
Preenche a string até um determinado comprimento com $padStr. Se o comprimento for menor ou igual ao comprimento da string, nenhum preenchimento ocorrerá. A string padrão usada para preenchimento é um espaço, e o tipo padrão (um de 'esquerda', 'direita', 'ambos') é 'direita'. Lança uma InvalidArgumentException se $padType não for um desses 3 valores.
s('fòôbàř')->pad(9, '-/', 'esquerda'); // '-/-fòôbàř'
Retorna uma nova string de um determinado comprimento, de modo que ambos os lados da string sejam preenchidos. Alias para pad() com $padType de 'ambos'.
s('foo bar')->padBoth(9, ' '); // 'foobar'
Retorna uma nova string de um determinado comprimento, de modo que o início da string seja preenchido. Alias para pad() com $padType de 'esquerda'.
s('barra foo')->padLeft(9, ' '); // 'foobar'
Retorna uma nova string de um determinado comprimento, de modo que o final da string seja preenchido. Alias para pad() com $padType de 'right'.
s('barra foo')->padRight(10, '_*'); // 'foobar_*_'
Retorna uma nova string começando com $string.
s('bàř')->prepend('fòô'); // 'fòôbàř'
Substitui todas as ocorrências de $pattern em $str por $replacement. Um alias para mb_ereg_replace(). Observe que a opção 'i' com padrões multibyte em mb_ereg_replace() requer PHP 5.6+ para resultados corretos. Isso se deve à falta de suporte na versão empacotada do Oniguruma em PHP <5.6 e nas versões atuais do HHVM (3.8 e inferiores).
s('fòô ')->regexReplace('f[òô]+s', 'bàř'); // 'bàř's('fò')->regexReplace('(ò)', '1ô'); // 'fòô'
Retorna uma nova string com o prefixo $substring removido, se presente.
s('fòôbàř')->removeLeft('fòô'); // 'bar'
Retorna uma nova string com o sufixo $substring removido, se presente.
s('fòôbàř')->removeRight('bàř'); // 'fòô'
Retorna uma string repetida com um multiplicador. Um alias para str_repeat.
s('α')->repetir(3); // 'ααα'
Substitui todas as ocorrências de $search em $str por $replacement.
s('fòô bàř fòô bàř')->replace('fòô ', ''); // 'bàř bàř'
Retorna uma string invertida. Uma versão multibyte de strrev().
s('fòôbàř')->reverso(); // 'řàbôòf'
Trunca a string para um determinado comprimento, garantindo ao mesmo tempo que ela não divide palavras. Se $substring for fornecido e ocorrer truncamento, a string será ainda mais truncada para que a substring possa ser anexada sem exceder o comprimento desejado.
s('Quais são seus planos hoje?')->safeTruncate(22, '...');// 'Quais são seus planos...'
Uma função str_shuffle() multibyte. Ele retorna uma string com seus caracteres em ordem aleatória.
s('fòôbàř')->shuffle(); // 'àôřbòf'
Converte a string em um slug de URL. Isso inclui a substituição de caracteres não ASCII por seus equivalentes ASCII mais próximos, a remoção de caracteres não ASCII e não alfanuméricos restantes e a substituição de espaços em branco por $replacement. O padrão de substituição é um único traço e a string também é convertida em minúsculas. O idioma da string de origem também pode ser fornecido para transliteração específica do idioma.
s('Usando strings como fòô bàř')->slugify(); // 'usando strings como foo-bar'
Retorna a substring começando em $start e até, mas não incluindo, o índice especificado por $end. Se $end for omitido, a função extrai a string restante. Se $end for negativo, será calculado a partir do final da string.
s('fòôbàř')->slice(3, -1); // 'bà'
Divide a string com a expressão regular fornecida, retornando uma matriz de objetos Stringy. Um número inteiro opcional $limit truncará os resultados.
s('foo,bar,baz')->split(',', 2); // ['foo', 'barra']
Retorna verdadeiro se a string começar com $substring, caso contrário, retorna falso. Por padrão, a comparação diferencia maiúsculas de minúsculas, mas pode se tornar insensível definindo $caseSensitive como false.
s('FÒÔbàřbaz')->startsWith('fòôbàř', false); // verdadeiro
Retorna verdadeiro se a string começar com qualquer uma das $substrings, caso contrário, retorna falso. Por padrão, a comparação diferencia maiúsculas de minúsculas, mas pode se tornar insensível definindo $caseSensitive como false.
s('FÒÔbàřbaz')->startsWithAny(['fòô', 'bàř'], false); // verdadeiro
Retire todos os caracteres de espaço em branco. Isso inclui tabulações e caracteres de nova linha, bem como espaços em branco multibyte, como espaço fino e espaço ideográfico.
s(' Ο συγγραφέας ')->stripWhitespace(); // 'Οσυγγραφέας'
Retorna a substring começando em $start com o $length especificado. Ela difere da função mb_substr() porque fornecer um $length nulo retornará o resto da string, em vez de uma string vazia.
s('fòôbàř')->substr(2, 3); // 'ôbà'
Circunda uma string com a substring fornecida.
s(' ͜ ')->surround('ʘ'); // 'ʘ ͜ ʘ'
Retorna uma versão da string com troca de maiúsculas e minúsculas.
s('Ντανιλ')->swapCase(); // 'νΤΑΝΙΛ'
Retorna uma string com aspas inteligentes, reticências e travessões do Windows-1252 (comumente usados em documentos do Word) substituídos por seus equivalentes ASCII.
s('“Entendo…”')->arrumado(); // '"Eu vejo..."'
Retorna uma string cortada com a primeira letra de cada palavra em maiúscula. Também aceita um array, $ignore, permitindo listar palavras que não devem ser maiúsculas.
$ignore = ['at', 'by', 'for', 'in', 'of', 'on', 'out', 'to', 'the'];s('eu gosto de assistir televisão' )->titleize($ignore);// 'Eu gosto de assistir televisão'
Retorna uma versão ASCII da string. Um conjunto de caracteres não ASCII é substituído por seus equivalentes ASCII mais próximos e o restante é removido por padrão. O idioma ou localidade da string de origem pode ser fornecido para transliteração específica do idioma em qualquer um dos seguintes formatos: en, en_GB ou en-GB. Por exemplo, passar "de" resulta no mapeamento de "äöü" para "aeoeue" em vez de "aou" como em outras línguas.
s('fòôbàř')->toAscii(); // 'foobar's('äöü')->toAscii(); // 'aou's('äöü')->toAscii('de'); // 'aeoeue'
Retorna uma representação booleana do valor da string lógica fornecida. Por exemplo, 'true', '1', 'on' e 'yes' retornarão verdadeiro. 'false', '0', 'off' e 'no' retornarão falso. Em todos os casos, o caso é ignorado. Para outras strings numéricas, seu sinal determinará o valor de retorno. Além disso, strings em branco consistindo apenas de espaços em branco retornarão falso. Para todas as outras strings, o valor de retorno é o resultado de uma conversão booleana.
s('OFF')->toBoolean(); // falso
Converte todos os caracteres da string em letras minúsculas. Um alias para mb_strtolower() do PHP.
s('FÒÔBÀŘ')->toLowerCase(); // 'fòôbàř'
Converte cada tabulação na string em um número de espaços, conforme definido por $tabLength. Por padrão, cada tabulação é convertida em 4 espaços consecutivos.
s(' String discurso = "Oi"')->toSpaces(); // 'String discurso = "Oi"'
Converte cada ocorrência de algum número consecutivo de espaços, conforme definido por $tabLength, em uma tabulação. Por padrão, cada 4 espaços consecutivos são convertidos em uma tabulação.
s(' fòô bàř')->toTabs();// ' fòô bàř'
Converte o primeiro caractere de cada palavra da string em letras maiúsculas.
s('fòô bàř')->toTitleCase(); // 'Fòô Bàř'
Converte todos os caracteres da string em letras maiúsculas. Um alias para mb_strtoupper() do PHP.
s('fòôbàř')->toUpperCase(); // 'FÒÔBÀŘ'
Retorna uma string com espaços em branco removidos do início e do final da string. Suporta a remoção de espaços em branco Unicode. Aceita uma sequência opcional de caracteres para remover em vez dos padrões.
s('fòôbàř ')->trim(); // 'fòôbàř'
Retorna uma string com espaços em branco removidos do início da string. Suporta a remoção de espaços em branco Unicode. Aceita uma sequência opcional de caracteres para remover em vez dos padrões.
s('fòôbàř ')->trimLeft(); // 'fòôbàř'
Retorna uma string com espaços em branco removidos do final da string. Suporta a remoção de espaços em branco Unicode. Aceita uma sequência opcional de caracteres para remover em vez dos padrões.
s('fòôbàř ')->trimRight(); // 'fòôbàř'
Trunca a string para um determinado comprimento. Se $substring for fornecido e ocorrer truncamento, a string será ainda mais truncada para que a substring possa ser anexada sem exceder o comprimento desejado.
s('Quais são seus planos para hoje?')->truncate(19, '...'); // 'Quais são os seus...'
Retorna uma string minúscula e aparada separada por sublinhados. Os sublinhados são inseridos antes dos caracteres maiúsculos (com exceção do primeiro caractere da string) e no lugar dos espaços e também dos travessões.
s('TestUCase')->sublinhado(); // 'test_u_case'
Retorna uma versão UpperCamelCase da string fornecida. Ele corta os espaços circundantes, coloca letras em maiúscula após dígitos, espaços, travessões e sublinhados e remove espaços, travessões e sublinhados.
s('Upper Camel-Case')->upperCamelize(); // 'UpperCamelCase'
Converte o primeiro caractere da string fornecida em maiúsculas.
s('σ foo')->upperCaseFirst(); // 'Σ foo'
A seguir está uma lista de bibliotecas que estendem Stringy:
SliceableStringy: fatias de string semelhantes a Python em PHP
SubStringy: métodos avançados de substring
No diretório do projeto, os testes podem ser executados usando phpunit
Lançado sob a licença MIT - consulte LICENSE.txt
para obter detalhes.