slexx / pattern
Requires (Dev)
- phpunit/phpunit: ^6.2
This package is auto-updated.
Last update: 2025-02-08 07:52:34 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]
Документация
Текст
В любом тексте который не является синтаксической единицой языка, будут экранированы все символы регулярных выражений.
Не обязательное
Всё не обязательное, то чо может осуцтвовать в тексте по тем или иным присинам можно просто обнести квадратными скобками.
Параметры
Параметры обносятся знаком меньше слева и знаком больше справа, их можно использовать для того что бы найти какуюто часть текста.
Правила
В параметре через двоеточие можно указать имя правила для валидации параметра или регулярное выражение.
Установка правил
Для установки правила можно воспользоватся методом 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
Стандартные правила
Для удобства уже реализовано несколько правил, вот их список:
Правило по умолчанию
Если не указывать правило то будет использовано следующее регулярное выражение: .+
.
Приведение типов
Для некоторых стандартных правил работает приведение типов:
- 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