slexx / pattern
Installs: 61
Dependents: 2
Suggesters: 0
Security: 0
Stars: 2
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/slexx/pattern
Requires (Dev)
- phpunit/phpunit: ^6.2
This package is auto-updated.
Last update: 2025-10-08 09:19:19 UTC
README
Установка
$ composer require slexx/pattern
Базовое использование
Это новый язык шаблонов схожий с регулярными выражениями, но значительно проще. Основной класс имеет всего несколько методов, а сам язык прост как валенок. Компилируется в регулярное выражение.
Пример шаблона:
/users[/<id:int>[/<action:edit|delete>]]
Он компилируется в следующее регулярное выражение:
/^\/users(?:\/(?P<id>[1-9][0-9]*|0)(?:\/(?P<action>edit|delete))?)?(?:\/)?$/
Первый вариант намного легче читается и сним проще работать.
Пример использования:
use Slexx\Pattern\Pattrn; $pattern = new Pattern('/users/<id:int>'); var_dump($pattern->match('/users/5')); // -> ['id' => 5]
Документация
Текст
В любом тексте который не является синтаксической единицой языка, будут экранированы все символы регулярных выражений.
| Правило | Регулярное выражение | 
|---|---|
| users/<id>/ | /^users\/(?P<id>.+)\/$/ | 
Не обязательное
Всё не обязательное, то чо может осуцтвовать в тексте по тем или иным присинам можно просто обнести квадратными скобками.
| Правило | Регулярное выражение | 
|---|---|
| foo[|bar] | /^foo(?:\|bar)?$/ | 
Параметры
Параметры обносятся знаком меньше слева и знаком больше справа, их можно использовать для того что бы найти какуюто часть текста.
| Правило | Регулярное выражение | 
|---|---|
| users/<id>/<action> | /^users\/(?P<id>.+)\/(?P<action>.+)(?:\/)?$/ | 
Правила
В параметре через двоеточие можно указать имя правила для валидации параметра или регулярное выражение.
| Правило | Регулярное выражение | 
|---|---|
| /users/<id:int>/ | /^\/users\/(?P<id>[1-9][0-9]*|0)\/$/ | 
| <year:\d{4}>-<month:\d{2}> | /^(?P<year>\d{4})-(?P<month>\d{2})$/ | 
Установка правил
Для установки правила можно воспользоватся методом rule в котором первый аргумент
имя параметра, а второй регулярное выражение.
$pattern = new Pattern('users show <id:slug>'); $pattern->rule('slug', '[\w\d\-]+'); $pattern->match('users show alex1234'); // -> ['slug' => 'alex1234']; $pattern->match('users show {}+'); // -> null
Стандартные правила
Для удобства уже реализовано несколько правил, вот их список:
| Правило | Псевдоним | Регулярное выражение | 
|---|---|---|
| integer | int | [1-9][0-9]*|0 | 
| float | double | (?:[1-9][0-9]*|0)\.[0-9]* | 
| number | (?:[1-9][0-9]*|0)(?:\.[0-9]*)? | |
| string | (?:.|[^.])+ | |
| boolean | bool | true|false|0|1|on|off | 
| word | \w+ | |
| slug | [\w\d_\-]+ | 
Правило по умолчанию
Если не указывать правило то будет использовано следующее регулярное выражение: .+.
Приведение типов
Для некоторых стандартных правил работает приведение типов:
- int, integer
- float, double
- bool, boolean
Для все остальных случаев возвращается строка.
$pattern = new Pattern('users list[ --verbose[ <verbose:bool>]][ --offset <offset:int>][ --limit <limit:int>]'); $pattern->match('users list --verbose on --offset 5'); // -> ['verbose' => true, 'offset' => 5, 'limit' => null];
Значения по умолчанию
Для типа boolean по умолчанию возвращается false, для всех остальных null. Значение по умолчанию можно указать с помощью метода default где первым аргументом следует имя параметра, а вторым значение по умолчанию.
$pattern = new Pattern('users list[ --verbose[ <verbose:bool>]][ --offset <offset:int>][ --limit <limit:int>]'); $pattern->default('limit', 50); $pattern->default('verbose', true); $pattern->match('users list --offset 5'); // -> ['verbose' => true, 'offset' => 5, 'limit' => 50];
Проверка
Для проверки текста на соотвецтвие шаблону есть иетод is, он принимает строку
первым параметром и возвращает boolean.
$pattern = new Pattern('users/<id:int>[/]'); $pattern->is('users'); // -> false $pattern->is('users/5'); // -> true $pattern->is('/users/5/'); // -> true