fixed str test cases and str::limit function.

This commit is contained in:
Taylor Otwell 2011-10-15 14:17:58 -05:00
parent a6eaa06981
commit 17ea09364d
3 changed files with 11 additions and 10 deletions

View File

@ -39,6 +39,7 @@
'GET /' => function() 'GET /' => function()
{ {
return Laravel\Str::limit('This is a string of text', 3, '...');
return View::make('home.index'); return View::make('home.index');
}, },

View File

@ -101,11 +101,8 @@ public static function length($value)
/** /**
* Limit the number of characters in a string. * Limit the number of characters in a string.
* *
* Word integrity is preserved, so the number of characters in the
* truncated string will be rounded to the nearest word ending.
*
* <code> * <code>
* // Returns "Taylor..." * // Returns "Tay..."
* echo Str::limit('Taylor Otwell', 3); * echo Str::limit('Taylor Otwell', 3);
* *
* // Limit the number of characters and append a custom ending * // Limit the number of characters and append a custom ending
@ -113,17 +110,20 @@ public static function length($value)
* </code> * </code>
* *
* @param string $value * @param string $value
* @param int $length * @param int $limit
* @param string $end * @param string $end
* @return string * @return string
*/ */
public static function limit($value, $limit = 100, $end = '...') public static function limit($value, $limit = 100, $end = '...')
{ {
if (static::length($value) < $limit) return $value; if (static::length($value) <= $limit) return $value;
$limit = preg_replace('/\s+?(\S+)?$/', '', substr($value, 0, $limit)); if (function_exists('mb_substr'))
{
return mb_substr($value, 0, $limit, Config::get('application.encoding')).$end;
}
return (static::length($limit) == static::length($value)) ? $value : $limit.$end; return substr($value, 0, $limit).$end;
} }
/** /**

View File

@ -45,7 +45,7 @@ public function test_limit()
public function test_limit_words() public function test_limit_words()
{ {
$this->assertEquals('This is a...', Laravel\Str::limit_words('This is a string of text', 3, '...')); $this->assertEquals('This is a...', Laravel\Str::words('This is a string of text', 3, '...'));
$this->assertEquals('This is a string&nbsp;', Laravel\Str::limit_words('This is a string of text', 4, '&nbsp;')); $this->assertEquals('This is a string&nbsp;', Laravel\Str::words('This is a string of text', 4, '&nbsp;'));
} }
} }