slexx / pattern
Requires (Dev)
- phpunit/phpunit: ^6.2
This package is auto-updated.
Last update: 2025-03-08 08:06:04 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