1
0
mirror of https://github.com/danielstjules/Stringy.git synced 2025-09-04 18:35:33 +02:00

1 Commits

Author SHA1 Message Date
Daniel St. Jules
ee1e4074a6 Force disabling mbstring for subset of CI jobs 2016-03-21 13:07:25 -07:00
8 changed files with 1424 additions and 1824 deletions

View File

@@ -10,6 +10,10 @@ sudo: false
matrix:
fast_finish: true
include:
- php: 5.3
env: polyfill='true'
- php: 5.3
env: polyfill='false'
- php: 5.4
env: polyfill='true'
- php: 5.4
@@ -32,8 +36,8 @@ install: travis_retry composer install --no-interaction --prefer-source
before_script:
- travis_retry composer self-update
- travis_retry composer install --no-interaction --prefer-source
- if [[ $polyfill = 'true' ]]; then cat ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini; fi
- if [[ $polyfill = 'false' ]]; then travis_retry composer remove symfony/polyfill-mbstring; fi
script:
- vendor/bin/phpunit

View File

@@ -1,30 +1,3 @@
### 3.0.0 (2017-03-08)
* Breaking change: added $language parameter to toAscii, before
$removeUnsupported
* Breaking change: dropped PHP 5.3 support
* Breaking change: any StaticStringy methods that previously returned instances
of Stringy now return strings
### 2.4.0 (2017-03-02)
* Add startsWithAny
* Add endsWithAny
* Add stripWhitespace
* Fix error handling for unsupported encodings
* Change private methods to protected for extending class
* Fix safeTruncate for strings without spaces
* Additional char support in toAscii, e.g. full width chars and wide
non-breaking space
### 2.3.2 (2016-05-02)
* Improve support without mbstring
### 2.3.1 (2016-03-21)
* Always use root namespace for mbstring functions
### 2.3.0 (2016-03-19)
* Add Persian characters in Stringy::charsArray()

277
README.md
View File

@@ -1,16 +1,13 @@
![Stringy](http://danielstjules.com/github/stringy-logo.png)
A PHP string manipulation library with multibyte support. Compatible with PHP
5.4+, PHP 7, and HHVM.
5.3+, PHP 7, and HHVM. Refer to the [1.x branch](https://github.com/danielstjules/Stringy/tree/1.x)
for older documentation.
``` php
s('string')->toTitleCase()->ensureRight('y') == 'Stringy'
```
Refer to the [1.x branch](https://github.com/danielstjules/Stringy/tree/1.x) or
[2.x branch](https://github.com/danielstjules/Stringy/tree/2.x) for older
documentation.
[![Build Status](https://api.travis-ci.org/danielstjules/Stringy.svg?branch=master)](https://travis-ci.org/danielstjules/Stringy)
[![Total Downloads](https://poser.pugx.org/danielstjules/stringy/downloads)](https://packagist.org/packages/danielstjules/stringy)
[![License](https://poser.pugx.org/danielstjules/stringy/license)](https://packagist.org/packages/danielstjules/stringy)
@@ -24,128 +21,83 @@ documentation.
* [Class methods](#class-methods)
* [create](#createmixed-str--encoding-)
* [Instance methods](#instance-methods)
<table>
<tr>
<td>[append](#appendstring-string)</td>
<td>[at](#atint-index)</td>
<td>[between](#betweenstring-start-string-end--int-offset)</td>
<td>[camelize](#camelize)</td>
</tr>
<tr>
<td>[chars](#chars)</td>
<td>[collapseWhitespace](#collapsewhitespace)</td>
<td>[contains](#containsstring-needle--boolean-casesensitive--true-)</td>
<td>[containsAll](#containsallarray-needles--boolean-casesensitive--true-)</td>
</tr>
<tr>
<td>[containsAny](#containsanyarray-needles--boolean-casesensitive--true-)</td>
<td>[countSubstr](#countsubstrstring-substring--boolean-casesensitive--true-)</td>
<td>[dasherize](#dasherize)</td>
<td>[delimit](#delimitint-delimiter)</td>
</tr>
<tr>
<td>[endsWith](#endswithstring-substring--boolean-casesensitive--true-)</td>
<td>[endsWithAny](#endswithanystring-substrings--boolean-casesensitive--true-)</td>
<td>[ensureLeft](#ensureleftstring-substring)</td>
<td>[ensureRight](#ensurerightstring-substring)</td>
</tr>
<tr>
<td>[first](#firstint-n)</td>
<td>[getEncoding](#getencoding)</td>
<td>[hasLowerCase](#haslowercase)</td>
<td>[hasUpperCase](#hasuppercase)</td>
</tr>
<tr>
<td>[htmlDecode](#htmldecode)</td>
<td>[htmlEncode](#htmlencode)</td>
<td>[humanize](#humanize)</td>
<td>[indexOf](#indexofstring-needle--offset--0-)</td>
</tr>
<tr>
<td>[indexOfLast](#indexoflaststring-needle--offset--0-)</td>
<td>[insert](#insertint-index-string-substring)</td>
<td>[isAlpha](#isalpha)</td>
<td>[isAlphanumeric](#isalphanumeric)</td>
</tr>
<tr>
<td>[isBase64](#isbase64)</td>
<td>[isBlank](#isblank)</td>
<td>[isHexadecimal](#ishexadecimal)</td>
<td>[isJson](#isjson)</td>
</tr>
<tr>
<td>[isLowerCase](#islowercase)</td>
<td>[isSerialized](#isserialized)</td>
<td>[isUpperCase](#isuppercase)</td>
<td>[last](#lastint-n)</td>
</tr>
<tr>
<td>[length](#length)</td>
<td>[lines](#lines)</td>
<td>[longestCommonPrefix](#longestcommonprefixstring-otherstr)</td>
<td>[longestCommonSuffix](#longestcommonsuffixstring-otherstr)</td>
</tr>
<tr>
<td>[longestCommonSubstring](#longestcommonsubstringstring-otherstr)</td>
<td>[lowerCaseFirst](#lowercasefirst)</td>
<td>[pad](#padint-length--string-padstr-----string-padtype--right-)</td>
<td>[padBoth](#padbothint-length--string-padstr----)</td>
</tr>
<tr>
<td>[padLeft](#padleftint-length--string-padstr----)</td>
<td>[padRight](#padrightint-length--string-padstr----)</td>
<td>[prepend](#prependstring-string)</td>
<td>[regexReplace](#regexreplacestring-pattern-string-replacement--string-options--msr)</td>
</tr>
<tr>
<td>[removeLeft](#removeleftstring-substring)</td>
<td>[removeRight](#removerightstring-substring)</td>
<td>[repeat](#repeatint-multiplier)</td>
<td>[replace](#replacestring-search-string-replacement)</td>
</tr>
<tr>
<td>[reverse](#reverse)</td>
<td>[safeTruncate](#safetruncateint-length--string-substring---)</td>
<td>[shuffle](#shuffle)</td>
<td>[slugify](#slugify-string-replacement----)</td>
</tr>
<tr>
<td>[slice](#sliceint-start--int-end-)</td>
<td>[split](#splitstring-pattern--int-limit-)</td>
<td>[startsWith](#startswithstring-substring--boolean-casesensitive--true-)</td>
<td>[startsWithAny](#startswithanystring-substrings--boolean-casesensitive--true-)</td>
</tr>
<tr>
<td>[stripWhitespace](#stripwhitespace)</td>
<td>[substr](#substrint-start--int-length-)</td>
<td>[surround](#surroundstring-substring)</td>
<td>[swapCase](#swapcase)</td>
</tr>
<tr>
<td>[tidy](#tidy)</td>
<td>[titleize](#titleize-array-ignore)</td>
<td>[toAscii](#toascii-string-locale--en--bool-removeunsupported--true-)</td>
<td>[toBoolean](#toboolean)</td>
</tr>
<tr>
<td>[toLowerCase](#tolowercase)</td>
<td>[toSpaces](#tospaces-tablength--4-)</td>
<td>[toTabs](#totabs-tablength--4-)</td>
<td>[toTitleCase](#totitlecase)</td>
</tr>
<tr>
<td>[toUpperCase](#touppercase)</td>
<td>[trim](#trim-string-chars)</td>
<td>[trimLeft](#trimleft-string-chars)</td>
<td>[trimRight](#trimright-string-chars)</td>
</tr>
<tr>
<td>[truncate](#truncateint-length--string-substring---)</td>
<td>[underscored](#underscored)</td>
<td>[upperCamelize](#uppercamelize)</td>
<td>[upperCaseFirst](#uppercasefirst)</td>
</tr>
</table>
* [append](#appendstring-string)
* [at](#atint-index)
* [between](#betweenstring-start-string-end--int-offset)
* [camelize](#camelize)
* [chars](#chars)
* [collapseWhitespace](#collapsewhitespace)
* [contains](#containsstring-needle--boolean-casesensitive--true-)
* [containsAll](#containsallarray-needles--boolean-casesensitive--true-)
* [containsAny](#containsanyarray-needles--boolean-casesensitive--true-)
* [countSubstr](#countsubstrstring-substring--boolean-casesensitive--true-)
* [dasherize](#dasherize)
* [delimit](#delimitint-delimiter)
* [endsWith](#endswithstring-substring--boolean-casesensitive--true-)
* [ensureLeft](#ensureleftstring-substring)
* [ensureRight](#ensurerightstring-substring)
* [first](#firstint-n)
* [getEncoding](#getencoding)
* [hasLowerCase](#haslowercase)
* [hasUpperCase](#hasuppercase)
* [htmlDecode](#htmldecode)
* [htmlEncode](#htmlencode)
* [humanize](#humanize)
* [indexOf](#indexofstring-needle--offset--0-)
* [indexOfLast](#indexoflaststring-needle--offset--0-)
* [insert](#insertint-index-string-substring)
* [isAlpha](#isalpha)
* [isAlphanumeric](#isalphanumeric)
* [isBase64](#isbase64)
* [isBlank](#isblank)
* [isHexadecimal](#ishexadecimal)
* [isJson](#isjson)
* [isLowerCase](#islowercase)
* [isSerialized](#isserialized)
* [isUpperCase](#isuppercase)
* [last](#last)
* [length](#length)
* [lines](#lines)
* [longestCommonPrefix](#longestcommonprefixstring-otherstr)
* [longestCommonSuffix](#longestcommonsuffixstring-otherstr)
* [longestCommonSubstring](#longestcommonsubstringstring-otherstr)
* [lowerCaseFirst](#lowercasefirst)
* [pad](#padint-length--string-padstr-----string-padtype--right-)
* [padBoth](#padbothint-length--string-padstr----)
* [padLeft](#padleftint-length--string-padstr----)
* [padRight](#padrightint-length--string-padstr----)
* [prepend](#prependstring-string)
* [regexReplace](#regexreplacestring-pattern-string-replacement--string-options--msr)
* [removeLeft](#removeleftstring-substring)
* [removeRight](#removerightstring-substring)
* [repeat](#repeatmultiplier)
* [replace](#replacestring-search-string-replacement)
* [reverse](#reverse)
* [safeTruncate](#safetruncateint-length--string-substring---)
* [shuffle](#shuffle)
* [slugify](#slugify-string-replacement----)
* [startsWith](#startswithstring-substring--boolean-casesensitive--true-)
* [slice](#sliceint-start--int-end-)
* [split](#splitstring-pattern--int-limit-)
* [substr](#substrint-start--int-length-)
* [surround](#surroundstring-substring)
* [swapCase](#swapcase)
* [tidy](#tidy)
* [titleize](#titleize-array-ignore)
* [toAscii](#toascii)
* [toBoolean](#toboolean)
* [toLowerCase](#tolowercase)
* [toSpaces](#tospaces-tablength--4-)
* [toTabs](#totabs-tablength--4-)
* [toTitleCase](#totitlecase)
* [toUpperCase](#touppercase)
* [trim](#trim-string-chars)
* [trimLeft](#trimleft-string-chars)
* [trimRight](#trimright-string-chars)
* [truncate](#truncateint-length--string-substring---)
* [underscored](#underscored)
* [upperCamelize](#uppercamelize)
* [upperCaseFirst](#uppercasefirst)
* [Extensions](#extensions)
* [Tests](#tests)
* [License](#license)
@@ -179,7 +131,7 @@ in your composer.json file:
```json
"require": {
"danielstjules/stringy": "~3.0"
"danielstjules/stringy": "~2.3"
}
```
@@ -287,9 +239,9 @@ integer, boolean, etc.
```php
use Stringy\StaticStringy as S;
// Translates to Stringy::create('fòôbàř')->slice(0, 3);
// Translates to Stringy::create('fòôbàř', 'UTF-8')->slice(0, 3);
// Returns a Stringy object with the string "fòô"
S::slice('fòôbàř', 0, 3);
S::slice('fòôbàř', 0, 3, 'UTF-8');
```
## Class methods
@@ -303,7 +255,7 @@ then returns the initialized object. Throws an InvalidArgumentException
if the first argument is an array or object without a __toString method.
```php
$stringy = S::create('fòôbàř'); // 'fòôbàř'
$stringy = S::create('fòôbàř', 'UTF-8'); // 'fòôbàř'
```
## Instance Methods
@@ -436,17 +388,7 @@ default, the comparison is case-sensitive, but can be made insensitive by
setting $caseSensitive to false.
```php
s('fòôbàř')->endsWith('bàř'); // true
```
##### endsWithAny(string[] $substrings [, boolean $caseSensitive = true ])
Returns true if the string ends with any of $substrings, false otherwise.
By default, the comparison is case-sensitive, but can be made insensitive
by setting $caseSensitive to false.
```php
s('fòôbàř')->endsWithAny(['bàř', 'baz']); // true
s('fòôbàř')->endsWith('bàř', true); // true
```
##### ensureLeft(string $substring)
@@ -478,7 +420,7 @@ s('fòôbàř')->first(3); // 'fòô'
Returns the encoding used by the Stringy object.
```php
s('fòôbàř')->getEncoding(); // 'UTF-8'
s('fòôbàř', 'UTF-8')->getEncoding(); // 'UTF-8'
```
##### hasLowerCase()
@@ -821,6 +763,16 @@ is also converted to lowercase.
s('Using strings like fòô bàř')->slugify(); // 'using-strings-like-foo-bar'
```
##### startsWith(string $substring [, boolean $caseSensitive = true ])
Returns true if the string begins with $substring, false otherwise.
By default, the comparison is case-sensitive, but can be made insensitive
by setting $caseSensitive to false.
```php
s('FÒÔbàřbaz')->startsWith('fòôbàř', false); // true
```
##### slice(int $start [, int $end ])
Returns the substring beginning at $start, and up to, but not including
@@ -842,36 +794,6 @@ results.
s('foo,bar,baz')->split(',', 2); // ['foo', 'bar']
```
##### startsWith(string $substring [, boolean $caseSensitive = true ])
Returns true if the string begins with $substring, false otherwise.
By default, the comparison is case-sensitive, but can be made insensitive
by setting $caseSensitive to false.
```php
s('FÒÔbàřbaz')->startsWith('fòôbàř', false); // true
```
##### startsWithAny(string[] $substrings [, boolean $caseSensitive = true ])
Returns true if the string begins with any of $substrings, false
otherwise. By default the comparison is case-sensitive, but can be made
insensitive by setting $caseSensitive to false.
```php
s('FÒÔbàřbaz')->startsWithAny(['fòô', 'bàř'], false); // true
```
##### stripWhitespace()
Strip all whitespace characters. This includes tabs and newline
characters, as well as multibyte whitespace such as the thin space
and ideographic space.
```php
s(' Ο συγγραφέας ')->stripWhitespace(); // 'Οσυγγραφέας'
```
##### substr(int $start [, int $length ])
Returns the substring beginning at $start with the specified $length.
@@ -919,19 +841,14 @@ s('i like to watch television')->titleize($ignore);
// 'I Like to Watch Television'
```
##### toAscii([, string $locale = 'en' [, bool $removeUnsupported = true ]])
##### toAscii()
Returns an ASCII version of the string. A set of non-ASCII characters are
replaced with their closest ASCII counterparts, and the rest are removed
by default. The language or locale of the source string can be supplied
for language-specific transliteration in any of the following formats:
en, en_GB, or en-GB. For example, passing "de" results in "äöü" mapping
to "aeoeue" rather than "aou" as in other languages.
unless instructed otherwise.
```php
s('fòôbàř')->toAscii(); // 'foobar'
s('äöü')->toAscii(); // 'aou'
s('äöü')->toAscii('de'); // 'aeoeue'
```
##### toBoolean()

View File

@@ -15,7 +15,7 @@
}
],
"require": {
"php": ">=5.4.0",
"php": ">=5.3.0",
"symfony/polyfill-mbstring": "~1.1"
},
"require-dev": {

View File

@@ -16,14 +16,13 @@ use ReflectionMethod;
* @method static string chars(string $str, string $encoding = null)
* @method static string collapseWhitespace(string $str, string $encoding = null)
* @method static bool contains(string $str, string $needle, bool $caseSensitive = true, string $encoding = null)
* @method static bool containsAll(string $str, string[] $needle, bool $caseSensitive = true, string $encoding = null)
* @method static bool containsAny(string $str, string[] $needle, bool $caseSensitive = true, string $encoding = null)
* @method static bool containsAll(string $str, string $needle, bool $caseSensitive = true, string $encoding = null)
* @method static bool containsAny(string $str, string $needle, bool $caseSensitive = true, string $encoding = null)
* @method static int count(string $str, string $encoding = null)
* @method static int countSubstr(string $str, string $substring, bool $caseSensitive = true, string $encoding = null)
* @method static string dasherize(string $str, string $encoding = null)
* @method static string delimit(string $str, string $delimiter, string $encoding = null)
* @method static bool endsWith(string $str, string $substring, bool $caseSensitive = true, string $encoding = null)
* @method static bool endsWithAny(string $str, string[] $substrings, bool $caseSensitive = true, string $encoding = null)
* @method static string ensureLeft(string $str, string $substring, string $encoding = null)
* @method static string ensureRight(string $str, string $substring, string $encoding = null)
* @method static string first(string $str, int $n, string $encoding = null)
@@ -46,7 +45,7 @@ use ReflectionMethod;
* @method static bool isUpperCase(string $str, string $encoding = null)
* @method static string last(string $str, string $encoding = null)
* @method static int length(string $str, string $encoding = null)
* @method static string[] lines(string $str, string $encoding = null)
* @method static Stringy[] lines(string $str, string $encoding = null)
* @method static string longestCommonPrefix(string $str, string $otherStr, string $encoding = null)
* @method static string longestCommonSuffix(string $str, string $otherStr, string $encoding = null)
* @method static string longestCommonSubstring(string $str, string $otherStr, string $encoding = null)
@@ -65,17 +64,15 @@ use ReflectionMethod;
* @method static string safeTruncate(string $str, int $length, string $substring = '', string $encoding = null)
* @method static string shuffle(string $str, string $encoding = null)
* @method static string slugify(string $str, string $replacement = '-', string $encoding = null)
* @method static bool startsWith(string $str, string $substring, bool $caseSensitive = true, string $encoding = null)
* @method static string slice(string $str, int $start, int $end = null, string $encoding = null)
* @method static string split(string $str, string $pattern, int $limit = null, string $encoding = null)
* @method static bool startsWith(string $str, string $substring, bool $caseSensitive = true, string $encoding = null)
* @method static bool startsWithAny(string $str, string[] $substrings, bool $caseSensitive = true, string $encoding = null)
* @method static string stripWhitespace(string $str, string $encoding = null)
* @method static string substr(string $str, int $start, int $length = null, string $encoding = null)
* @method static string surround(string $str, string $substring, string $encoding = null)
* @method static string swapCase(string $str, string $encoding = null)
* @method static string tidy(string $str, string $encoding = null)
* @method static string titleize(string $str, string $encoding = null)
* @method static string toAscii(string $str, string $language = 'en', bool $removeUnsupported = true, string $encoding = null)
* @method static string toAscii(string $str, bool $removeUnsupported = true, string $encoding = null)
* @method static bool toBoolean(string $str, string $encoding = null)
* @method static string toLowerCase(string $str, string $encoding = null)
* @method static string toSpaces(string $str, int $tabLength = 4, string $encoding = null)
@@ -146,16 +143,6 @@ class StaticStringy
$stringy = Stringy::create($str, $encoding);
$result = call_user_func_array([$stringy, $name], $args);
$cast = function($val) {
if (is_object($val) && $val instanceof Stringy) {
return (string) $val;
} else {
return $val;
}
};
return is_array($result) ? array_map($cast, $result) : $cast($result);
return call_user_func_array(array($stringy, $name), $args);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -15,38 +15,25 @@ class StaticStringyTestCase extends PHPUnit_Framework_TestCase
public function testEmptyArgsInvocation()
{
$result = S::toLowerCase();
$this->assertEquals('', $result);
$this->assertEquals('', (string) $result);
}
public function testInvocation()
{
$result = S::toLowerCase('FOOBAR');
$this->assertEquals('foobar', $result);
$this->assertInternalType('string', $result);
$this->assertEquals('foobar', (string) $result);
}
public function testPartialArgsInvocation()
{
$result = S::slice('foobar', 0, 3);
$this->assertEquals('foo', $result);
$this->assertInternalType('string', $result);
$this->assertEquals('foo', (string) $result);
}
public function testFullArgsInvocation()
{
$result = S::slice('fòôbàř', 0, 3, 'UTF-8');
$this->assertEquals('fòô', $result);
$this->assertInternalType('string', $result);
}
public function testArrayReturnValue()
{
$result = S::lines("a\nb");
$this->assertEquals(['a', 'b'], $result);
$this->assertInternalType('array', $result);
foreach ($result as $val) {
$this->assertInternalType('string', $val);
}
$this->assertEquals('fòô', (string) $result);
}
/**

File diff suppressed because it is too large Load Diff