diff --git a/README.md b/README.md index 8f9b9b1..b6abe5c 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ A PHP library with a variety of string manipulation functions with multibyte sup * [isBlank](#isblank) * [isHexadecimal](#ishexadecimal) * [isLowerCase](#islowercase) + * [isSerialized](#isserialized) * [isUpperCase](#isuppercase) * [last](#last) * [length](#length) @@ -364,6 +365,19 @@ S::create('fòô bàř', 'UTF-8')->isLowerCase(); S::isLowerCase('fòô bàř', 'UTF-8'); // true ``` +#### isSerialized + +$stringy->isSerialized() + +S::isSerialized(string $str [, string $encoding ]) + +Returns true if the string is serialized, false otherwise. + +```php +S::create('a:1:{s:3:"foo";s:3:"bar";}',, 'UTF-8')->isSerialized(); +S::isSerialized('a:1:{s:3:"foo";s:3:"bar";}', 'UTF-8'); // true +``` + #### isUpperCase $stringy->isUpperCase() diff --git a/src/Stringy/StaticStringy.php b/src/Stringy/StaticStringy.php index ab75aef..fd3a49f 100644 --- a/src/Stringy/StaticStringy.php +++ b/src/Stringy/StaticStringy.php @@ -636,6 +636,18 @@ class StaticStringy return Stringy::create($str, $encoding)->isLowerCase(); } + /** + * Returns true if the string is serialized, false otherwise. + * + * @param string $str String to check + * @param string $encoding The character encoding + * @return bool Whether or not $str is serialized + */ + public static function isSerialized($str, $encoding = null) + { + return Stringy::create($str, $encoding)->isSerialized(); + } + /** * Returns true if the string contains only upper case chars, false otherwise. * diff --git a/src/Stringy/Stringy.php b/src/Stringy/Stringy.php index 256d07a..0daec77 100644 --- a/src/Stringy/Stringy.php +++ b/src/Stringy/Stringy.php @@ -1014,6 +1014,16 @@ class Stringy return $this->matchesPattern('^([[:upper:]])*$'); } + /** + * Returns true if the string is serialized, false otherwise. + * + * @return bool Whether or not $str is serialized + */ + public function isSerialized() + { + return $this->str === 'b:0;' || @unserialize($this->str) !== false; + } + /** * Returns the number of occurrences of $substring in the given string. * An alias for mb_substr_count() diff --git a/tests/Stringy/CommonTest.php b/tests/Stringy/CommonTest.php index f300a08..9cfd575 100644 --- a/tests/Stringy/CommonTest.php +++ b/tests/Stringy/CommonTest.php @@ -782,6 +782,21 @@ abstract class CommonTest extends PHPUnit_Framework_TestCase return $testData; } + public function stringsForIsSerialized() + { + $testData = array( + array(false, ''), + array(true, 'a:1:{s:3:"foo";s:3:"bar";}'), + array(false, 'a:1:{s:3:"foo";s:3:"bar"}'), + array(true, serialize(false)), + array(true, 'a:1:{s:3:"foo";s:3:"bar";}', 'UTF-8'), + array(false, 'a:1:{s:3:"foo";s:3:"bar"}', 'UTF-8'), + array(true, serialize(false), 'UTF-8'), + ); + + return $testData; + } + public function stringsForIsUpperCase() { $testData = array( diff --git a/tests/Stringy/StaticStringyTest.php b/tests/Stringy/StaticStringyTest.php index 7ceae44..4467c12 100644 --- a/tests/Stringy/StaticStringyTest.php +++ b/tests/Stringy/StaticStringyTest.php @@ -472,6 +472,16 @@ class StaticStringyTestCase extends CommonTest $this->assertEquals($expected, $result); } + /** + * @dataProvider stringsForIsSerialized + */ + public function testIsSerialized($expected, $str, $encoding = null) + { + $result = S::isSerialized($str, $encoding); + $this->assertInternalType('boolean', $result); + $this->assertEquals($expected, $result); + } + /** * @dataProvider stringsForIsUpperCase */ diff --git a/tests/Stringy/StringyTest.php b/tests/Stringy/StringyTest.php index d6ab75b..c412582 100644 --- a/tests/Stringy/StringyTest.php +++ b/tests/Stringy/StringyTest.php @@ -550,6 +550,18 @@ class StringyTestCase extends CommonTest $this->assertEquals($str, $stringy); } + /** + * @dataProvider stringsForIsSerialized + */ + public function testIsSerialized($expected, $str, $encoding = null) + { + $stringy = S::create($str, $encoding); + $result = $stringy->isSerialized(); + $this->assertInternalType('boolean', $result); + $this->assertEquals($expected, $result); + $this->assertEquals($str, $stringy); + } + /** * @dataProvider stringsForIsUpperCase */