vendeka-nl / text
String helper class and functions.
Requires
- php: ^8.2.0
- illuminate/support: ^11|^12|^13
Requires (Dev)
- phpunit/phpunit: ^11
This package is auto-updated.
Last update: 2026-03-18 13:55:19 UTC
README
This package adds a handful of useful string helper methods to Illuminate\Support\Str.
The package is developed and maintained by Vendeka, a company from the Netherlands.
Installation
Install using composer:
composer require vendeka-nl/text
With Laravel
If you are using Laravel this package automatically adds its macros to Illuminate\Support\Str.
Without Laravel
If you are not using Laravel, you need to boot the package manually. This is only required to be executed once, so put it somewhere at the start of your app.
use Vendeka\Text\Text; Text::boot();
Usage
This package adds a number of helpful methods to Illuminate\Support\Str. Check the Laravel documentation to see the available methods on Illuminate\Support\Str.
use Illuminate\Support\Str; Str::of('taco')->enclose('[', ']')->upper(); //=> '[TACO]' Str::unclose('/gift/', '/'); //=> 'gift'
Available methods
Most methods are chainable using the Illuminate\Support\Stringable class, either by using Illuminate\Support\Str::of() or Laravel's str() helper function. To convert to a string, either typecast to a string (echo will do this automatically) or call the toString() method. Methods marked with an asterisk (*) are not chainable
encloseexclamationglue*naturalnullIfBlank*nullIfEmpty*questionsentencetoParagraphstoWordsuncloseunprefixunsuffix
enclose
Since v3.0.2
Enclose a text with a prefix and a (different) suffix. If the suffix is null the prefix is also used as the suffix.
Str::enclose('directory', '/'); //=> '/directory/' Str::enclose('directory/', '/'); //=> '/directory/' Str::enclose('Paragraph', '<p>', '</p>'); //=> '<p>Paragraph</p>' Str::enclose('<p>Paragraph</p>', '<p>', '</p>'); //=> '<p>Paragraph</p>'
exclamation
Since v3.0.0
Create an exclamation from a string. This method automatically uppercases the first letter and adds a question mark if none if there is no period or exclamation mark at the end of it.
Str::exclamation('yelling'); //=> 'Yelling!' Str::exclamation('Why are you yelling?'); //=> 'Why are you yelling?!'
glue
Since v3.0.0
Glue together multiple strings, without duplicate glue between items.
Str::glue('/', 'https://example.com/', '/dashboard'); //=> 'https://example.com/dashboard' Str::glue('/', '/var', '/www/', []); //=> '/var/www/'
natural
Since v3.0.0
Create a natural language version of a snake_case of kebab-case string.
Str::natural('my-first-blog'); //=> 'My first blog' Str::natural('i_love_kebab'); // => 'I love kebab'
nullIfBlank
Since v3.0.0
Convert a blank string to null.
Str::nullIfBlank(' '); //=> null
nullIfEmpty
Since v3.0.0
Convert an empty string to null.
Str::nullIfEmpty(''); //=> null
question
Since v3.0.0
Create a question from a string. This method automatically uppercases the first letter and adds a question mark if none if there is no period, exclamation mark or question mark at the end of it.
Str::question('Questions'); //=> 'Questions?'
sentence
Since v3.0.0
Create a question from a string. This method automatically uppercases the first letter and adds a question mark if none if there is no period, exclamation mark or question mark at the end of it.
Str::sentence('this is a sentence'); //=> 'This is a sentence.'
toParagraphs
Since v3.0.0
Split a text into paragraphs.
Please note that this method does not return a string, but an instance of Vendeka\Text\Paragraphs.
Str::toParagraphs("Paragraph 1\n\nParagraph 2"); // => instance of Vendeka\Text\Paragraphs
toWords
Since v1.0.0
Convert a snake_case, kebab-case, camelCase or StudlyCase to a string of words. For example 'aSnake' becomes 'A snake'.
Please note that this method does not return a string, but an instance of Vendeka\Text\Words.
use Vendeka\Text\Words; (string) Str::toWords('a-dog'); //=> 'a dog' Str::of('aSnake')->toWords()->of()->lower(); //=> 'a snake' (string) (new Words(['From', 'an', 'array'])); //=> 'From an array'
unclose
Since v3.1.1
Unclose (unwrap) a text with a prefix and a (different) suffix. If the suffix is null the prefix is also used as the suffix.
Str::unclose('<p>Gift</p>', '<p>', '</p>'); //=> 'Gift' Str::unclose('/present/', '/') //=> 'present'
unprefix
Since v1.0.0
Deprecated since v4.1.0: Use \Illuminate\Support\Str::chopStart instead. Please note that chopStart returns after the first matched needle (lead).
Remove a prefix if it is present.
Str::unprefix('#yolo', '#') //=> 'yolo'
unsuffix
Since v1.0.0
Deprecated since v4.1.0: Use \Illuminate\Support\Str::chopEnd instead. Please note that chopEnd returns after the first matched needle (cap).
Remove a suffix if it is present.
Str::unsuffix('/var/www/', '/') //=> '/var/www'
Available classes
Paragraphs
Since v3.0.0
The class Vendeka\Text\Paragraphs extends Illuminate\Support\Collection. The class can be initialized via its constructor or the Illuminate\Support\Str::toParagraphs() method.
$paragraphs = new Paragraphs("First paragraph\n\nSecond paragraph..."); $paragraphs = new Paragraphs(['First paragraph', 'Second paragraph...']); $paragraphs = Str::toParagraphs("First paragraph\n\nSecond paragraph...");
It adds the following useful methods:
br
br(string $br) sets the <br> HTML tag used in toHtml(). The default is set to <br>.
eol
eol(string $char) sets the EOL character(s), used in both toHtml() and toString().
of
of() returns a new instance of Illuminate\Support\Stringable to continue the method chain.
toString
toString() returns the paragraphs as a string
toHtml
toHtml() returns the paragraphs as a HTML string wrapped in <p> tags. Single new lines are replaced with <br>.
Words
Since v2.0.0
The class Vendeka\Text\Words extends Illuminate\Support\Collection. The class can be initialized via its constructor or the Illuminate\Support\Str::toWords() method.
$words = new Words("First Second"); $words = new Words(['First', 'Second']); $words = Str::toWords("First Second");
It adds the following useful methods:
of
of() returns a new instance of Illuminate\Support\Stringable to continue the method chain.
toString
toString() returns the words as a string glued together with a single space (or custom string) between words (casting to a string is also supported).
Str::toWords('my-slug')->toString(); // => 'my slug' Str::toWords('my-folder')->toString('/'); // => 'my/slug' (string) Str::toWords("It's a kind of magic!"); // => "It's a kind of magic!"
Upgrading
Upgrading to v4.1
Deprecated unprefix method
Version 4.1.0 deprecates the unprefix method, in favor of the chopStart method that comes with illuminate/support. Please note that chopStart returns after the first matched needle (cap).
Deprecated unsuffix method
Version 4.1.0 deprecates the unsuffix method, in favor of the chopEnd method that comes with illuminate/support. Please note that chopEnd returns after the first matched needle (lead).
Upgrading to v4.0
Dropped wrap method
Version 4.0.0 removed the wrap method. Use enclose instead.
Dropped unwrap method
Version 4.0.0 removed the unwrap method. Use unclose instead.
Dropped normalizeWhitespace method
Version 4.0.0 removed the normalizeWhitespace method, in favor of the squish method that comes with illuminate/support.
Upgrading to v3.3
PHP version bumped to 8.2
Version 3.3 requires PHP 8.2 or higher.
Deprecated normalizeWhitespace method
Version 3.1.1 deprecated the normalizeWhitespace method, in favor of the squish method that comes with illuminate/support.
Upgrading to v3.1
Deprecated wrap method
Version 3.0.2 deprecated the wrap method because a method with the same name was added in illuminate/support v9.31 and overrides this packages' version. Use enclose instead.
Deprecated unwrap method
Version 3.1.1 deprecated the unwrap method because a method with the same name was added in illuminate/support v10.43 and overrides this packages' version.Use unclose instead.
Upgrading to v3.0
PHP version bumped to 8.0
Version 3.x requires PHP 8.0 or higher.
Upgrading to v2.x
Version 2.x requires PHP 7.4 or higher.
After updating the package, change your calls using the table below.
Replace all other references to Vendeka\Text\Text with Illuminate\Support\Str.
Removed methods
Version 2 relies more on illuminate/support and dropped a few helper methods and the Vendeka\Text\Fluid class.
| v1 | v2+ |
|---|---|
Vendeka\Text\Fluid |
Illuminate\Support\Str::of() |
Vendeka\Text\Text::changeCase() |
Illuminate\Support\Str::lower()Illuminate\Support\Str::upper()Illuminate\Support\Str::ucfirst() Illuminate\Support\Str::title() |
Vendeka\Text\Text::firstToUpperCase() |
Illuminate\Support\Str::ucfirst() |
Vendeka\Text\Text::startsWith() |
Illuminate\Support\Str::startsWith() |
Vendeka\Text\Text::toLowerCase() |
Illuminate\Support\Str::lower() |
Vendeka\Text\Text::toTitleCase() |
Illuminate\Support\Str::title() |
Vendeka\Text\Text::toUpperCase() |
Illuminate\Support\Str::upper() |
Testing
composer run test