1
0
mirror of https://github.com/danielstjules/Stringy.git synced 2025-09-01 09:03:03 +02:00

25 Commits
2.2.0 ... 2.3.1

Author SHA1 Message Date
Daniel St. Jules
bd90918858 2.3.1 2016-03-21 13:26:21 -07:00
Daniel St. Jules
a2d1ec535a Fix #129: Always use root namespace for mbstring functions 2016-03-21 13:22:27 -07:00
Daniel St. Jules
b953a85d2c Add capture group test to regexReplaceProvider 2016-03-19 17:57:04 -07:00
Daniel St. Jules
e07a07a076 Add capture group example to readme 2016-03-19 17:53:09 -07:00
Daniel St. Jules
c4d785d29f Fix changelog date 2016-03-19 17:34:20 -07:00
Daniel St. Jules
5554477962 2.3.0 2016-03-19 17:33:13 -07:00
Daniel St. Jules
87c1a47355 Support older verisons of composer 2016-03-19 17:21:08 -07:00
Daniel St. Jules
6d558974ba Merge pull request #120 from lucasmichot/feature/master/useless-else
Remove some useless else.
2016-02-10 13:20:49 -08:00
Daniel St. Jules
5a9b987f9a Merge pull request #124 from lucasmichot/feature/master/integrates-polyfill
Add polyfill
2016-02-09 16:59:23 -08:00
Lucas Michot
e3d397fa74 Add polyfill 2016-02-10 01:56:06 +01:00
Daniel St. Jules
ffc3fa5ff9 Merge pull request #112 from lucasmichot/feature/master/polyfill
WIP - Allows Stringy to work without ext-mbstring
2016-02-09 16:43:13 -08:00
Lucas Michot
c3f25577ed Avoid duplicate jobs 2016-02-10 01:38:59 +01:00
Lucas Michot
5a4629662c Add tests matrix 2016-02-10 01:28:12 +01:00
Lucas Michot
823e50a340 Allows Stringy to work without ext-mbstring 2016-01-08 18:35:53 +01:00
Daniel St. Jules
9d77c49fca Merge pull request #117 from lucasmichot/feature/master/phpunit-autoload
Let phpunit load autoload.php
2016-01-08 09:32:17 -08:00
Daniel St. Jules
a074d2a2ac Merge pull request #118 from lucasmichot/feature/master/import
Avoid FQN in code
2016-01-08 09:30:30 -08:00
Daniel St. Jules
b7cfa84219 Merge pull request #119 from lucasmichot/feature/master/export-ignore-editorconfig
Do not export .editorconfig
2016-01-08 09:25:15 -08:00
Lucas Michot
e3be6a56ea Composer install for travisCI tests. 2016-01-08 18:22:09 +01:00
Lucas Michot
bdbd4d7541 Let phpunit load autoload.php 2016-01-08 18:01:20 +01:00
Lucas Michot
8419369f3b Add some imports 2016-01-08 18:01:13 +01:00
Lucas Michot
a3dde38a2f Do not export .editorconfig 2016-01-08 18:00:43 +01:00
Lucas Michot
59ce593086 Remove some useless else. 2016-01-08 18:00:23 +01:00
Daniel St. Jules
54cf92c89c Merge pull request #115 from behzadsh/master
Add Persian characters in Stringy::charsArray()
2015-12-27 11:17:23 -05:00
Behzad Shabani
d320bf8704 Add Persian characters in Stringy::charsArray() 2015-12-27 16:03:33 +03:30
Daniel St. Jules
2de4c4aee3 Add badges 2015-12-26 08:13:47 -08:00
11 changed files with 203 additions and 148 deletions

1
.gitattributes vendored
View File

@@ -1,5 +1,6 @@
* text=auto
.editorconfig export-ignore
.gitattributes export-ignore
.gitignore export-ignore
.travis.yml export-ignore

View File

@@ -1,12 +1,43 @@
language: php
php:
- 5.6
- 5.5
- 5.4
- 5.3
- 7.0
- hhvm
# This triggers builds to run on the new TravisCI infrastructure.
# See: http://docs.travis-ci.com/user/workers/container-based-infrastructure/
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
env: polyfill='false'
- php: 5.5
env: polyfill='true'
- php: 5.5
env: polyfill='false'
- php: 5.6
env: polyfill='true'
- php: 5.6
env: polyfill='false'
- php: 7.0
env: polyfill='true'
- php: 7.0
env: polyfill='false'
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 = 'false' ]]; then travis_retry composer remove symfony/polyfill-mbstring; fi
script:
- vendor/bin/phpunit

View File

@@ -1,3 +1,12 @@
### 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()
* Use symfony/polyfill-mbstring to avoid dependency on ext-mbstring
### 2.2.0 (2015-12-20)
* isJSON now returns false for empty strings

View File

@@ -9,6 +9,8 @@ s('string')->toTitleCase()->ensureRight('y') == 'Stringy'
```
[![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)
* [Why?](#why)
* [Installation](#installation)
@@ -129,7 +131,7 @@ in your composer.json file:
```json
"require": {
"danielstjules/stringy": "~2.2"
"danielstjules/stringy": "~2.3"
}
```
@@ -152,11 +154,13 @@ And in either case, I'd suggest using an alias.
use Stringy\Stringy as S;
```
Please note that Stringy relies on the `mbstring` PHP module for its underlying
multibyte support. This is a non-default, but very common module. For example,
with debian and ubuntu, it's included in libapache2-mod-php5, php5-cli, and
php5-fpm. For OSX users, it's a default for any version of PHP installed with
homebrew. If compiling PHP from scratch, it can be included with the
Please note that Stringy relies on the `mbstring` module for its underlying
multibyte support. If the module is not found, Stringy will use
[symfony/polyfill-mbstring](https://github.com/symfony/polyfill-mbstring).
ex-mbstring is a non-default, but very common module. For example, with debian
and ubuntu, it's included in libapache2-mod-php5, php5-cli, and php5-fpm. For
OSX users, it's a default for any version of PHP installed with homebrew.
If compiling PHP from scratch, it can be included with the
`--enable-mbstring` flag.
## OO and Chaining
@@ -682,7 +686,8 @@ to a lack of support in the bundled version of Oniguruma in PHP < 5.6,
and current versions of HHVM (3.8 and below).
```php
s('fòô ')->regexReplace('f[òô]+\s', 'bàř', 'msr'); // 'bàř'
s('fòô ')->regexReplace('f[òô]+\s', 'bàř'); // 'bàř'
s('fò')->regexReplace('(ò)', '\\1ô'); // 'fòô'
```
##### removeLeft(string $substring)

View File

@@ -16,7 +16,7 @@
],
"require": {
"php": ">=5.3.0",
"ext-mbstring": "*"
"symfony/polyfill-mbstring": "~1.1"
},
"require-dev": {
"phpunit/phpunit": "~4.0"

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit processIsolation="false"
<phpunit bootstrap="vendor/autoload.php"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false">
<testsuites>

View File

@@ -2,6 +2,10 @@
namespace Stringy;
use BadMethodCallException;
use ReflectionClass;
use ReflectionMethod;
/**
* Class StaticStringy
*
@@ -107,12 +111,14 @@ class StaticStringy
* @param mixed[] $arguments
*
* @return Stringy
*
* @throws \BadMethodCallException
*/
public static function __callStatic($name, $arguments)
{
if (!static::$methodArgs) {
$stringyClass = new \ReflectionClass('Stringy\Stringy');
$methods = $stringyClass->getMethods(\ReflectionMethod::IS_PUBLIC);
$stringyClass = new ReflectionClass('Stringy\Stringy');
$methods = $stringyClass->getMethods(ReflectionMethod::IS_PUBLIC);
foreach ($methods as $method) {
$params = $method->getNumberOfParameters() + 2;
@@ -121,7 +127,7 @@ class StaticStringy
}
if (!isset(static::$methodArgs[$name])) {
throw new \BadMethodCallException($name . ' is not a valid method');
throw new BadMethodCallException($name . ' is not a valid method');
}
$numArgs = count($arguments);

View File

@@ -2,7 +2,15 @@
namespace Stringy;
class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
use ArrayAccess;
use ArrayIterator;
use Countable;
use Exception;
use InvalidArgumentException;
use IteratorAggregate;
use OutOfBoundsException;
class Stringy implements Countable, IteratorAggregate, ArrayAccess
{
/**
* An instance's string.
@@ -34,17 +42,17 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
public function __construct($str = '', $encoding = null)
{
if (is_array($str)) {
throw new \InvalidArgumentException(
throw new InvalidArgumentException(
'Passed value cannot be an array'
);
} elseif (is_object($str) && !method_exists($str, '__toString')) {
throw new \InvalidArgumentException(
throw new InvalidArgumentException(
'Passed object must have a __toString method'
);
}
$this->str = (string) $str;
$this->encoding = $encoding ?: mb_internal_encoding();
$this->encoding = $encoding ?: \mb_internal_encoding();
}
/**
@@ -114,7 +122,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
return static::create('', $this->encoding);
}
$substrIndex = $startIndex + mb_strlen($start, $this->encoding);
$substrIndex = $startIndex + \mb_strlen($start, $this->encoding);
$endIndex = $this->indexOf($end, $substrIndex);
if ($endIndex === false) {
return static::create('', $this->encoding);
@@ -140,10 +148,10 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
'/[-_\s]+(.)?/u',
function ($match) use ($encoding) {
if (isset($match[1])) {
return mb_strtoupper($match[1], $encoding);
} else {
return '';
return \mb_strtoupper($match[1], $encoding);
}
return '';
},
$stringy->str
);
@@ -151,7 +159,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$stringy->str = preg_replace_callback(
'/[\d]+(.)?/u',
function ($match) use ($encoding) {
return mb_strtoupper($match[0], $encoding);
return \mb_strtoupper($match[0], $encoding);
},
$stringy->str
);
@@ -200,10 +208,10 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$encoding = $this->encoding;
if ($caseSensitive) {
return (mb_strpos($this->str, $needle, 0, $encoding) !== false);
} else {
return (mb_stripos($this->str, $needle, 0, $encoding) !== false);
return (\mb_strpos($this->str, $needle, 0, $encoding) !== false);
}
return (\mb_stripos($this->str, $needle, 0, $encoding) !== false);
}
/**
@@ -276,13 +284,13 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
public function countSubstr($substring, $caseSensitive = true)
{
if ($caseSensitive) {
return mb_substr_count($this->str, $substring, $this->encoding);
return \mb_substr_count($this->str, $substring, $this->encoding);
}
$str = mb_strtoupper($this->str, $this->encoding);
$substring = mb_strtoupper($substring, $this->encoding);
$str = \mb_strtoupper($this->str, $this->encoding);
$substring = \mb_strtoupper($substring, $this->encoding);
return mb_substr_count($str, $substring, $this->encoding);
return \mb_substr_count($str, $substring, $this->encoding);
}
/**
@@ -309,14 +317,14 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
public function delimit($delimiter)
{
// Save current regex encoding so we can reset it after
$regexEncoding = mb_regex_encoding();
mb_regex_encoding($this->encoding);
$regexEncoding = \mb_regex_encoding();
\mb_regex_encoding($this->encoding);
$str = mb_ereg_replace('\B([A-Z])', '-\1', $this->trim());
$str = mb_strtolower($str, $this->encoding);
$str = mb_ereg_replace('[-_\s]+', $delimiter, $str);
$str = \mb_ereg_replace('\B([A-Z])', '-\1', $this->trim());
$str = \mb_strtolower($str, $this->encoding);
$str = \mb_ereg_replace('[-_\s]+', $delimiter, $str);
mb_regex_encoding($regexEncoding);
\mb_regex_encoding($regexEncoding);
return static::create($str, $this->encoding);
}
@@ -332,15 +340,15 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function endsWith($substring, $caseSensitive = true)
{
$substringLength = mb_strlen($substring, $this->encoding);
$substringLength = \mb_strlen($substring, $this->encoding);
$strLength = $this->length();
$endOfStr = mb_substr($this->str, $strLength - $substringLength,
$endOfStr = \mb_substr($this->str, $strLength - $substringLength,
$substringLength, $this->encoding);
if (!$caseSensitive) {
$substring = mb_strtolower($substring, $this->encoding);
$endOfStr = mb_strtolower($endOfStr, $this->encoding);
$substring = \mb_strtolower($substring, $this->encoding);
$endOfStr = \mb_strtolower($endOfStr, $this->encoding);
}
return (string) $substring === $endOfStr;
@@ -394,11 +402,10 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
if ($n < 0) {
$stringy->str = '';
} else {
return $stringy->substr(0, $n);
return $stringy;
}
return $stringy;
return $stringy->substr(0, $n);
}
/**
@@ -421,7 +428,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function getIterator()
{
return new \ArrayIterator($this->chars());
return new ArrayIterator($this->chars());
}
/**
@@ -501,7 +508,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function indexOf($needle, $offset = 0)
{
return mb_strpos($this->str, (string) $needle,
return \mb_strpos($this->str, (string) $needle,
(int) $offset, $this->encoding);
}
@@ -517,7 +524,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function indexOfLast($needle, $offset = 0)
{
return mb_strrpos($this->str, (string) $needle,
return \mb_strrpos($this->str, (string) $needle,
(int) $offset, $this->encoding);
}
@@ -535,8 +542,8 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
return $stringy;
}
$start = mb_substr($stringy->str, 0, $index, $stringy->encoding);
$end = mb_substr($stringy->str, $index, $stringy->length(),
$start = \mb_substr($stringy->str, 0, $index, $stringy->encoding);
$end = \mb_substr($stringy->str, $index, $stringy->length(),
$stringy->encoding);
$stringy->str = $start . $substring . $end;
@@ -661,11 +668,10 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
if ($n <= 0) {
$stringy->str = '';
} else {
return $stringy->substr(-$n);
return $stringy;
}
return $stringy;
return $stringy->substr(-$n);
}
/**
@@ -675,7 +681,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function length()
{
return mb_strlen($this->str, $this->encoding);
return \mb_strlen($this->str, $this->encoding);
}
/**
@@ -686,7 +692,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function lines()
{
$array = mb_split('[\r\n]{1,2}', $this->str);
$array = \mb_split('[\r\n]{1,2}', $this->str);
for ($i = 0; $i < count($array); $i++) {
$array[$i] = static::create($array[$i], $this->encoding);
}
@@ -703,13 +709,13 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
public function longestCommonPrefix($otherStr)
{
$encoding = $this->encoding;
$maxLength = min($this->length(), mb_strlen($otherStr, $encoding));
$maxLength = min($this->length(), \mb_strlen($otherStr, $encoding));
$longestCommonPrefix = '';
for ($i = 0; $i < $maxLength; $i++) {
$char = mb_substr($this->str, $i, 1, $encoding);
$char = \mb_substr($this->str, $i, 1, $encoding);
if ($char == mb_substr($otherStr, $i, 1, $encoding)) {
if ($char == \mb_substr($otherStr, $i, 1, $encoding)) {
$longestCommonPrefix .= $char;
} else {
break;
@@ -728,13 +734,13 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
public function longestCommonSuffix($otherStr)
{
$encoding = $this->encoding;
$maxLength = min($this->length(), mb_strlen($otherStr, $encoding));
$maxLength = min($this->length(), \mb_strlen($otherStr, $encoding));
$longestCommonSuffix = '';
for ($i = 1; $i <= $maxLength; $i++) {
$char = mb_substr($this->str, -$i, 1, $encoding);
$char = \mb_substr($this->str, -$i, 1, $encoding);
if ($char == mb_substr($otherStr, -$i, 1, $encoding)) {
if ($char == \mb_substr($otherStr, -$i, 1, $encoding)) {
$longestCommonSuffix = $char . $longestCommonSuffix;
} else {
break;
@@ -758,7 +764,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$encoding = $this->encoding;
$stringy = static::create($this->str, $encoding);
$strLength = $stringy->length();
$otherLength = mb_strlen($otherStr, $encoding);
$otherLength = \mb_strlen($otherStr, $encoding);
// Return if either string is empty
if ($strLength == 0 || $otherLength == 0) {
@@ -773,8 +779,8 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
for ($i = 1; $i <= $strLength; $i++) {
for ($j = 1; $j <= $otherLength; $j++) {
$strChar = mb_substr($stringy->str, $i - 1, 1, $encoding);
$otherChar = mb_substr($otherStr, $j - 1, 1, $encoding);
$strChar = \mb_substr($stringy->str, $i - 1, 1, $encoding);
$otherChar = \mb_substr($otherStr, $j - 1, 1, $encoding);
if ($strChar == $otherChar) {
$table[$i][$j] = $table[$i - 1][$j - 1] + 1;
@@ -788,7 +794,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
}
}
$stringy->str = mb_substr($stringy->str, $end - $len, $len, $encoding);
$stringy->str = \mb_substr($stringy->str, $end - $len, $len, $encoding);
return $stringy;
}
@@ -800,11 +806,11 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function lowerCaseFirst()
{
$first = mb_substr($this->str, 0, 1, $this->encoding);
$rest = mb_substr($this->str, 1, $this->length() - 1,
$first = \mb_substr($this->str, 0, 1, $this->encoding);
$rest = \mb_substr($this->str, 1, $this->length() - 1,
$this->encoding);
$str = mb_strtolower($first, $this->encoding) . $rest;
$str = \mb_strtolower($first, $this->encoding) . $rest;
return static::create($str, $this->encoding);
}
@@ -846,10 +852,10 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$length = $this->length();
if (($offset >= 0 && $length <= $offset) || $length < abs($offset)) {
throw new \OutOfBoundsException('No character exists at the index');
throw new OutOfBoundsException('No character exists at the index');
}
return mb_substr($this->str, $offset, 1, $this->encoding);
return \mb_substr($this->str, $offset, 1, $this->encoding);
}
/**
@@ -863,7 +869,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
public function offsetSet($offset, $value)
{
// Stringy is immutable, cannot directly set char
throw new \Exception('Stringy object is immutable, cannot modify char');
throw new Exception('Stringy object is immutable, cannot modify char');
}
/**
@@ -876,7 +882,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
public function offsetUnset($offset)
{
// Don't allow directly modifying the string
throw new \Exception('Stringy object is immutable, cannot unset char');
throw new Exception('Stringy object is immutable, cannot unset char');
}
/**
@@ -896,7 +902,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
public function pad($length, $padStr = ' ', $padType = 'right')
{
if (!in_array($padType, array('left', 'right', 'both'))) {
throw new \InvalidArgumentException('Pad expects $padType ' .
throw new InvalidArgumentException('Pad expects $padType ' .
"to be one of 'left', 'right' or 'both'");
}
@@ -977,11 +983,11 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function regexReplace($pattern, $replacement, $options = 'msr')
{
$regexEncoding = mb_regex_encoding();
mb_regex_encoding($this->encoding);
$regexEncoding = \mb_regex_encoding();
\mb_regex_encoding($this->encoding);
$str = mb_ereg_replace($pattern, $replacement, $this->str, $options);
mb_regex_encoding($regexEncoding);
$str = \mb_ereg_replace($pattern, $replacement, $this->str, $options);
\mb_regex_encoding($regexEncoding);
return static::create($str, $this->encoding);
}
@@ -997,7 +1003,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$stringy = static::create($this->str, $this->encoding);
if ($stringy->startsWith($substring)) {
$substringLength = mb_strlen($substring, $stringy->encoding);
$substringLength = \mb_strlen($substring, $stringy->encoding);
return $stringy->substr($substringLength);
}
@@ -1015,7 +1021,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$stringy = static::create($this->str, $this->encoding);
if ($stringy->endsWith($substring)) {
$substringLength = mb_strlen($substring, $stringy->encoding);
$substringLength = \mb_strlen($substring, $stringy->encoding);
return $stringy->substr(0, $stringy->length() - $substringLength);
}
@@ -1059,7 +1065,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
// Loop from last index of string to first
for ($i = $strLength - 1; $i >= 0; $i--) {
$reversed .= mb_substr($this->str, $i, 1, $this->encoding);
$reversed .= \mb_substr($this->str, $i, 1, $this->encoding);
}
return static::create($reversed, $this->encoding);
@@ -1084,16 +1090,16 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
// Need to further trim the string so we can append the substring
$encoding = $stringy->encoding;
$substringLength = mb_strlen($substring, $encoding);
$substringLength = \mb_strlen($substring, $encoding);
$length = $length - $substringLength;
$truncated = mb_substr($stringy->str, 0, $length, $encoding);
$truncated = \mb_substr($stringy->str, 0, $length, $encoding);
// If the last word was truncated
if (mb_strpos($stringy->str, ' ', $length - 1, $encoding) != $length) {
// Find pos of the last occurrence of a space, get up to that
$lastPos = mb_strrpos($truncated, ' ', 0, $encoding);
$truncated = mb_substr($truncated, 0, $lastPos, $encoding);
$lastPos = \mb_strrpos($truncated, ' ', 0, $encoding);
$truncated = \mb_substr($truncated, 0, $lastPos, $encoding);
}
$stringy->str = $truncated . $substring;
@@ -1114,7 +1120,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$shuffledStr = '';
foreach ($indexes as $i) {
$shuffledStr .= mb_substr($this->str, $i, 1, $this->encoding);
$shuffledStr .= \mb_substr($this->str, $i, 1, $this->encoding);
}
return static::create($shuffledStr, $this->encoding);
@@ -1153,13 +1159,13 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function startsWith($substring, $caseSensitive = true)
{
$substringLength = mb_strlen($substring, $this->encoding);
$startOfStr = mb_substr($this->str, 0, $substringLength,
$substringLength = \mb_strlen($substring, $this->encoding);
$startOfStr = \mb_substr($this->str, 0, $substringLength,
$this->encoding);
if (!$caseSensitive) {
$substring = mb_strtolower($substring, $this->encoding);
$startOfStr = mb_strtolower($startOfStr, $this->encoding);
$substring = \mb_strtolower($substring, $this->encoding);
$startOfStr = \mb_strtolower($startOfStr, $this->encoding);
}
return (string) $substring === $startOfStr;
@@ -1187,7 +1193,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$length = $end - $start;
}
$str = mb_substr($this->str, $start, $length, $this->encoding);
$str = \mb_substr($this->str, $start, $length, $this->encoding);
return static::create($str, $this->encoding);
}
@@ -1213,14 +1219,14 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
return array(static::create($this->str, $this->encoding));
}
$regexEncoding = mb_regex_encoding();
mb_regex_encoding($this->encoding);
$regexEncoding = \mb_regex_encoding();
\mb_regex_encoding($this->encoding);
// mb_split returns the remaining unsplit string in the last index when
// supplying a limit
$limit = ($limit > 0) ? $limit += 1 : -1;
$array = mb_split($pattern, $this->str, $limit);
mb_regex_encoding($regexEncoding);
$array = \mb_split($pattern, $this->str, $limit);
\mb_regex_encoding($regexEncoding);
if ($limit > 0 && count($array) === $limit) {
array_pop($array);
@@ -1245,7 +1251,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
public function substr($start, $length = null)
{
$length = $length === null ? $this->length() : $length;
$str = mb_substr($this->str, $start, $length, $this->encoding);
$str = \mb_substr($this->str, $start, $length, $this->encoding);
return static::create($str, $this->encoding);
}
@@ -1277,11 +1283,11 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
$stringy->str = preg_replace_callback(
'/[\S]/u',
function ($match) use ($encoding) {
if ($match[0] == mb_strtoupper($match[0], $encoding)) {
return mb_strtolower($match[0], $encoding);
} else {
return mb_strtoupper($match[0], $encoding);
if ($match[0] == \mb_strtoupper($match[0], $encoding)) {
return \mb_strtolower($match[0], $encoding);
}
return \mb_strtoupper($match[0], $encoding);
},
$stringy->str
);
@@ -1331,10 +1337,11 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
function ($match) use ($encoding, $ignore) {
if ($ignore && in_array($match[0], $ignore)) {
return $match[0];
} else {
$stringy = new Stringy($match[0], $encoding);
return (string) $stringy->toLowerCase()->upperCaseFirst();
}
$stringy = new Stringy($match[0], $encoding);
return (string) $stringy->toLowerCase()->upperCaseFirst();
},
$stringy->str
);
@@ -1395,9 +1402,9 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
return $map[$key];
} elseif (is_numeric($this->str)) {
return (intval($this->str) > 0);
} else {
return (bool) $this->regexReplace('[[:space:]]', '')->str;
}
return (bool) $this->regexReplace('[[:space:]]', '')->str;
}
/**
@@ -1408,7 +1415,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function toLowerCase()
{
$str = mb_strtolower($this->str, $this->encoding);
$str = \mb_strtolower($this->str, $this->encoding);
return static::create($str, $this->encoding);
}
@@ -1451,7 +1458,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function toTitleCase()
{
$str = mb_convert_case($this->str, MB_CASE_TITLE, $this->encoding);
$str = \mb_convert_case($this->str, \MB_CASE_TITLE, $this->encoding);
return static::create($str, $this->encoding);
}
@@ -1464,7 +1471,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function toUpperCase()
{
$str = mb_strtoupper($this->str, $this->encoding);
$str = \mb_strtoupper($this->str, $this->encoding);
return static::create($str, $this->encoding);
}
@@ -1531,10 +1538,10 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
}
// Need to further trim the string so we can append the substring
$substringLength = mb_strlen($substring, $stringy->encoding);
$substringLength = \mb_strlen($substring, $stringy->encoding);
$length = $length - $substringLength;
$truncated = mb_substr($stringy->str, 0, $length, $stringy->encoding);
$truncated = \mb_substr($stringy->str, 0, $length, $stringy->encoding);
$stringy->str = $truncated . $substring;
return $stringy;
@@ -1572,11 +1579,11 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
public function upperCaseFirst()
{
$first = mb_substr($this->str, 0, 1, $this->encoding);
$rest = mb_substr($this->str, 1, $this->length() - 1,
$first = \mb_substr($this->str, 0, 1, $this->encoding);
$rest = \mb_substr($this->str, 1, $this->length() - 1,
$this->encoding);
$str = mb_strtoupper($first, $this->encoding) . $rest;
$str = \mb_strtoupper($first, $this->encoding) . $rest;
return static::create($str, $this->encoding);
}
@@ -1592,22 +1599,22 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
if (isset($charsArray)) return $charsArray;
return $charsArray = array(
'0' => array('°', '₀'),
'1' => array('¹', '₁'),
'2' => array('²', '₂'),
'3' => array('³', '₃'),
'4' => array('⁴', '₄'),
'5' => array('⁵', '₅'),
'6' => array('⁶', '₆'),
'7' => array('⁷', '₇'),
'8' => array('⁸', '₈'),
'9' => array('⁹', '₉'),
'0' => array('°', '₀', '۰'),
'1' => array('¹', '₁', '۱'),
'2' => array('²', '₂', '۲'),
'3' => array('³', '₃', '۳'),
'4' => array('⁴', '₄', '۴', '٤'),
'5' => array('⁵', '₅', '۵', '٥'),
'6' => array('⁶', '₆', '۶', '٦'),
'7' => array('⁷', '₇', '۷'),
'8' => array('⁸', '₈', '۸'),
'9' => array('⁹', '₉', '۹'),
'a' => array('à', 'á', 'ả', 'ã', 'ạ', 'ă', 'ắ', 'ằ', 'ẳ', 'ẵ',
'ặ', 'â', 'ấ', 'ầ', 'ẩ', 'ẫ', 'ậ', 'ā', 'ą', 'å',
'α', 'ά', 'ἀ', 'ἁ', 'ἂ', 'ἃ', 'ἄ', 'ἅ', 'ἆ', 'ἇ',
'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ', 'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ὰ', 'ά',
'ᾰ', 'ᾱ', 'ᾲ', 'ᾳ', 'ᾴ', 'ᾶ', 'ᾷ', 'а', 'أ', 'အ',
'ာ', 'ါ', 'ǻ', 'ǎ', 'ª', 'ა', 'अ'),
'ာ', 'ါ', 'ǻ', 'ǎ', 'ª', 'ა', 'अ', 'ا'),
'b' => array('б', 'β', 'Ъ', 'Ь', 'ب', 'ဗ', 'ბ'),
'c' => array('ç', 'ć', 'č', 'ĉ', 'ċ'),
'd' => array('ď', 'ð', 'đ', 'ƌ', 'ȡ', 'ɖ', 'ɗ', 'ᵭ', 'ᶁ', 'ᶑ',
@@ -1615,17 +1622,17 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
'e' => array('é', 'è', 'ẻ', 'ẽ', 'ẹ', 'ê', 'ế', 'ề', 'ể', 'ễ',
'ệ', 'ë', 'ē', 'ę', 'ě', 'ĕ', 'ė', 'ε', 'έ', 'ἐ',
'ἑ', 'ἒ', 'ἓ', 'ἔ', 'ἕ', 'ὲ', 'έ', 'е', 'ё', 'э',
'є', 'ə', 'ဧ', 'ေ', 'ဲ', 'ე', 'ए'),
'є', 'ə', 'ဧ', 'ေ', 'ဲ', 'ე', 'ए', 'إ', 'ئ'),
'f' => array('ф', 'φ', 'ف', 'ƒ', 'ფ'),
'g' => array('ĝ', 'ğ', 'ġ', 'ģ', 'г', 'ґ', 'γ', 'ج', 'ဂ', 'გ'),
'g' => array('ĝ', 'ğ', 'ġ', 'ģ', 'г', 'ґ', 'γ', 'ဂ', 'გ', 'گ'),
'h' => array('ĥ', 'ħ', 'η', 'ή', 'ح', 'ه', 'ဟ', 'ှ', 'ჰ'),
'i' => array('í', 'ì', 'ỉ', 'ĩ', 'ị', 'î', 'ï', 'ī', 'ĭ', 'į',
'ı', 'ι', 'ί', 'ϊ', 'ΐ', 'ἰ', 'ἱ', 'ἲ', 'ἳ', 'ἴ',
'ἵ', 'ἶ', 'ἷ', 'ὶ', 'ί', 'ῐ', 'ῑ', 'ῒ', 'ΐ', 'ῖ',
'ῗ', 'і', 'ї', 'и', 'ဣ', 'ိ', 'ီ', 'ည်', 'ǐ', 'ი',
'इ'),
'j' => array('ĵ', 'ј', 'Ј', 'ჯ'),
'k' => array('ķ', 'ĸ', 'к', 'κ', 'Ķ', 'ق', 'ك', 'က', 'კ', 'ქ'),
'इ', 'ی'),
'j' => array('ĵ', 'ј', 'Ј', 'ჯ', 'ج'),
'k' => array('ķ', 'ĸ', 'к', 'κ', 'Ķ', 'ق', 'ك', 'က', 'კ', 'ქ', 'ک'),
'l' => array('ł', 'ľ', 'ĺ', 'ļ', 'ŀ', 'л', 'λ', 'ل', 'လ', 'ლ'),
'm' => array('м', 'μ', 'م', 'မ', 'მ'),
'n' => array('ñ', 'ń', 'ň', 'ņ', 'ʼn', 'ŋ', 'ν', 'н', 'ن', 'န',
@@ -1634,7 +1641,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
'ộ', 'ơ', 'ớ', 'ờ', 'ở', 'ỡ', 'ợ', 'ø', 'ō', 'ő',
'ŏ', 'ο', 'ὀ', 'ὁ', 'ὂ', 'ὃ', 'ὄ', 'ὅ', 'ὸ', 'ό',
'о', 'و', 'θ', 'ို', 'ǒ', 'ǿ', 'º', 'ო', 'ओ'),
'p' => array('п', 'π', 'ပ', 'პ'),
'p' => array('п', 'π', 'ပ', 'პ', 'پ'),
'q' => array(''),
'r' => array('ŕ', 'ř', 'ŗ', 'р', 'ρ', 'ر', 'რ'),
's' => array('ś', 'š', 'ş', 'с', 'σ', 'ș', 'ς', 'س', 'ص', 'စ',
@@ -1650,11 +1657,11 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
'y' => array('ý', 'ỳ', 'ỷ', 'ỹ', 'ỵ', 'ÿ', 'ŷ', 'й', 'ы', 'υ',
'ϋ', 'ύ', 'ΰ', 'ي', 'ယ'),
'z' => array('ź', 'ž', 'ż', 'з', 'ζ', 'ز', 'ဇ', 'ზ'),
'aa' => array('ع', 'आ'),
'aa' => array('ع', 'आ', 'آ'),
'ae' => array('ä', 'æ', 'ǽ'),
'ai' => array('ऐ'),
'at' => array('@'),
'ch' => array('ч', 'ჩ', 'ჭ'),
'ch' => array('ч', 'ჩ', 'ჭ', 'چ'),
'dj' => array('ђ', 'đ'),
'dz' => array('џ', 'ძ'),
'ei' => array('ऍ'),
@@ -1664,11 +1671,11 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
'kh' => array('х', 'خ', 'ხ'),
'lj' => array('љ'),
'nj' => array('њ'),
'oe' => array('ö', 'œ'),
'oe' => array('ö', 'œ', 'ؤ'),
'oi' => array('ऑ'),
'oii' => array('ऒ'),
'ps' => array('ψ'),
'sh' => array('ш', 'შ'),
'sh' => array('ш', 'შ', 'ش'),
'shch' => array('щ'),
'ss' => array('ß'),
'sx' => array('ŝ'),
@@ -1678,7 +1685,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
'uu' => array('ऊ'),
'ya' => array('я'),
'yu' => array('ю'),
'zh' => array('ж', 'ჟ'),
'zh' => array('ж', 'ჟ', 'ژ'),
'(c)' => array('©'),
'A' => array('Á', 'À', 'Ả', 'Ã', 'Ạ', 'Ă', 'Ắ', 'Ằ', 'Ẳ', 'Ẵ',
'Ặ', 'Â', 'Ấ', 'Ầ', 'Ẩ', 'Ẫ', 'Ậ', 'Å', 'Ā', 'Ą',
@@ -1761,7 +1768,7 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
private function applyPadding($left = 0, $right = 0, $padStr = ' ')
{
$stringy = static::create($this->str, $this->encoding);
$length = mb_strlen($padStr, $stringy->encoding);
$length = \mb_strlen($padStr, $stringy->encoding);
$strLength = $stringy->length();
$paddedLength = $strLength + $left + $right;
@@ -1770,9 +1777,9 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
return $stringy;
}
$leftPadding = mb_substr(str_repeat($padStr, ceil($left / $length)), 0,
$leftPadding = \mb_substr(str_repeat($padStr, ceil($left / $length)), 0,
$left, $stringy->encoding);
$rightPadding = mb_substr(str_repeat($padStr, ceil($right / $length)),
$rightPadding = \mb_substr(str_repeat($padStr, ceil($right / $length)),
0, $right, $stringy->encoding);
$stringy->str = $leftPadding . $stringy->str . $rightPadding;
@@ -1788,11 +1795,11 @@ class Stringy implements \Countable, \IteratorAggregate, \ArrayAccess
*/
private function matchesPattern($pattern)
{
$regexEncoding = mb_regex_encoding();
mb_regex_encoding($this->encoding);
$regexEncoding = \mb_regex_encoding();
\mb_regex_encoding($this->encoding);
$match = mb_ereg_match($pattern, $this->str);
mb_regex_encoding($regexEncoding);
$match = \mb_ereg_match($pattern, $this->str);
\mb_regex_encoding($regexEncoding);
return $match;
}

View File

@@ -1,7 +1,5 @@
<?php
require __DIR__ . '/../src/Create.php';
use function Stringy\create as s;
class CreateTestCase extends PHPUnit_Framework_TestCase

View File

@@ -1,7 +1,5 @@
<?php
require __DIR__ . '/../src/StaticStringy.php';
use Stringy\StaticStringy as S;
class StaticStringyTestCase extends PHPUnit_Framework_TestCase

View File

@@ -1,7 +1,5 @@
<?php
require __DIR__ . '/../src/Stringy.php';
use Stringy\Stringy as S;
class StringyTestCase extends PHPUnit_Framework_TestCase
@@ -2374,6 +2372,7 @@ class StringyTestCase extends PHPUnit_Framework_TestCase
array('foo', 'bar', '[[:alpha:]]{3}', 'foo'),
array('', '', '', '', 'msr', 'UTF-8'),
array('bàř', 'fòô ', 'f[òô]+\s', 'bàř', 'msr', 'UTF-8'),
array('fòô', 'fò', '(ò)', '\\1ô', 'msr', 'UTF-8'),
array('fòô', 'bàř', '[[:alpha:]]{3}', 'fòô', 'msr', 'UTF-8')
);
}