2017 © Pedro Peláez
 

library pattern

image

slexx/pattern

  • Monday, July 31, 2017
  • by slexx
  • Repository
  • 0 Watchers
  • 1 Stars
  • 19 Installations
  • PHP
  • 2 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 4 Versions
  • 6 % Grown

The README.md

Pattern

Latest Stable Version Total Downloads Latest Unstable Version License, (*1)

Установка

$ composer require slexx/pattern

Базовое использование

Это новый язык шаблонов схожий с регулярными выражениями, но значительно проще. Основной класс имеет всего несколько методов, а сам язык прост как валенок. Компилируется в регулярное выражение., (*2)

Пример шаблона:, (*3)

/users[/<id:int>[/<action:edit|delete>]]

Он компилируется в следующее регулярное выражение:, (*4)

/^\/users(?:\/(?P<id>[1-9][0-9]*|0)(?:\/(?P<action>edit|delete))?)?(?:\/)?$/

Первый вариант намного легче читается и сним проще работать., (*5)

Пример использования:, (*6)

use Slexx\Pattern\Pattrn;

$pattern = new Pattern('/users/<id:int>');
var_dump($pattern->match('/users/5')); // -> ['id' => 5]

Документация

Текст

В любом тексте который не является синтаксической единицой языка, будут экранированы все символы регулярных выражений., (*7)

Правило Регулярное выражение
users/<id>/ /^users\/(?P<id>.+)\/$/

Не обязательное

Всё не обязательное, то чо может осуцтвовать в тексте по тем или иным присинам можно просто обнести квадратными скобками., (*8)

Правило Регулярное выражение
foo[|bar] /^foo(?:\|bar)?$/

Параметры

Параметры обносятся знаком меньше слева и знаком больше справа, их можно использовать для того что бы найти какуюто часть текста., (*9)

Правило Регулярное выражение
users/<id>/<action> /^users\/(?P<id>.+)\/(?P<action>.+)(?:\/)?$/

Правила

В параметре через двоеточие можно указать имя правила для валидации параметра или регулярное выражение., (*10)

Правило Регулярное выражение
/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 в котором первый аргумент имя параметра, а второй регулярное выражение., (*11)

$pattern = new Pattern('users show <id:slug>');
$pattern->rule('slug', '[\w\d\-]+');

$pattern->match('users show alex1234'); 
// -> ['slug' => 'alex1234'];

$pattern->match('users show {}+'); 
// -> null
Стандартные правила

Для удобства уже реализовано несколько правил, вот их список:, (*12)

Правило Псевдоним Регулярное выражение
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_\-]+
Правило по умолчанию

Если не указывать правило то будет использовано следующее регулярное выражение: .+., (*13)

Приведение типов

Для некоторых стандартных правил работает приведение типов:, (*14)

  • int, integer
  • float, double
  • bool, boolean

Для все остальных случаев возвращается строка., (*15)

$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 где первым аргументом следует имя параметра, а вторым значение по умолчанию., (*16)

$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., (*17)

$pattern = new Pattern('users/<id:int>[/]');
$pattern->is('users'); // -> false
$pattern->is('users/5'); // -> true
$pattern->is('/users/5/'); // -> true

The Versions

31/07 2017

dev-master

9999999-dev

  Sources   Download

MIT

The Development Requires

by Aleksei Shchepkin

31/07 2017

v1.2.1

1.2.1.0

  Sources   Download

MIT

The Development Requires

by Aleksei Shchepkin

29/07 2017

v1.2.0

1.2.0.0

  Sources   Download

MIT

The Development Requires

by Aleksei Shchepkin

29/07 2017

1.0.0

1.0.0.0

  Sources   Download

MIT

The Development Requires

by Aleksei Shchepkin