-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Strings
CloudCastle\Support\Str — статические строковые утилиты, корректные для UTF-8: форматы
имён, регистр, поиск и срезы, маскирование, инфлексия и предикаты. Функциональный суперсет
illuminate/support, symfony/string, nette/utils, voku/stringy и doctrine/inflector.
Все операции работают по символам (через mb_*), а не по байтам, поэтому кириллица,
эмодзи и любые многобайтовые символы обрабатываются корректно. Горячие пути преобразования
регистра имеют ASCII fast-path: для однобайтового первого символа применяется нативный
strtoupper/strtolower — в разы быстрее mb_*, без потери корректности для остального.
use CloudCastle\Support\Str;
// Форматы имён
Str::studly('foo_bar_baz'); // 'FooBarBaz'
Str::camel('foo_bar_baz'); // 'fooBarBaz'
Str::snake('fooBarBaz'); // 'foo_bar_baz'
Str::kebab('fooBarBaz'); // 'foo-bar-baz'
Str::headline('user_profile');// 'User Profile'
// Регистр (UTF-8)
Str::upper('привет'); // 'ПРИВЕТ'
Str::ucfirst('привет'); // 'Привет'
// Поиск и срезы (по символам)
Str::after('a→b→c', '→'); // 'b→c'
Str::between('«ключ»', '«', '»'); // 'ключ'
Str::limit('привет мир', 5); // 'приве...'
// Маскирование ПД и генерация
Str::mask('4111111111111111', '*', 0, 12); // '************1111'
Str::random(32); // 32 безопасных символа [A-Za-z0-9]
// Инфлексия и предикаты
Str::plural('category'); // 'categories'
Str::isUuid('e2b0dd0e-9f8a-4c1e-8b2a-1234567890ab'); // true
Str::isJson('{"a":1}'); // true- Полная многобайтовая корректность на всех операциях (срезы, длины, регистр).
- ASCII fast-path делает преобразование имён быстрым без потери UTF-8-корректности.
-
maskзаточен под финтех: скрывает карты, счета, телефоны, оставляя видимый хвост. -
randomиспользуетrandom_bytes(криптостойкий источник), результат — только безопасные алфавитно-цифровые символы (без/,+,=). - Стабильная память: нет неограниченного статического кэша, как в
illuminate/support.
- Статические методы (не цепочечный объект) — для fluent-стиля Unicode используйте
symfony/stringилиvoku/stringy. - Инфлексия ограничена возможностями
doctrine/inflector(английский язык).
- Маскировать чувствительные данные перед логированием:
Str::mask($pan, '*', 0, 12). - Нормализовать ключи конфигурации:
Str::snake($rawKey). - Проверять формат до обработки:
Str::isUuid($id)/Str::isJson($payload).
- Резать строки байтовыми
substr/strlenдля UTF-8 — используйтеStr::substr/Str::length. - Генерировать токены через
rand()/uniqid()— используйтеStr::random(криптостойкий). - Логировать полные ПД — всегда применяйте
Str::mask.
flowchart TD
IN["исходная строка"] --> Q{"нужный формат?"}
Q -->|PascalCase| ST["studly()"]
Q -->|camelCase| CA["camel()"]
Q -->|snake_case| SN["snake()"]
Q -->|kebab-case| KE["kebab()"]
Q -->|Заголовок| HE["headline()"]
ST --> OUT["результат UTF-8"]
CA --> OUT
SN --> OUT
KE --> OUT
HE --> OUT
| Возможность | Support | illuminate | symfony | nette | voku | doctrine | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
| Форматы имён (studly/camel/snake/kebab) | ✅ | ✅ | ❌ | ✅ | Support, illuminate | ||
| Регистр UTF-8 + ASCII fast-path | ✅ | ✅ | ✅ | ✅ | ❌ | Support | |
mask сокрытие ПД |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | Support, illuminate |
| Инфлексия plural/singular | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | Паритет |
| Предикаты isJson/isUuid/isAscii | ✅ | ✅ | ❌ | Support, illuminate |
CloudCastle Support · · PHP 8.1+
GitHub · Packagist · Releases · Discussions
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)