<?php
// Пример маршрута
$routeData['where'] = [
'context' => '[a-z]{2}', // Параметр 'context' должен состоять из 2 символов
'alias' => '[a-z]+' // Параметр 'alias' может быть любым словом
];
// Пример URI
$uri = '/uk/services';
$pattern = '/{context}/{alias?}';
// Шаг 1: Разбираем паттерн маршрута и извлекаем параметры
preg_match_all('#\{([a-zA-Z0-9_]+)\}#', $pattern, $matches);
// Шаг 2: Заменяем параметры в паттерне на соответствующие регулярные выражения
$regex = preg_replace_callback(
'#\{([a-zA-Z0-9_]+)\}#',
function ($match) {
return '([^/]+)'; // Заменяем параметры на регулярные выражения для захвата значений
},
$pattern
);
// Добавляем начало и конец регулярного выражения
$regex = '#^' . $regex . '$#';
// Шаг 3: Сопоставляем URI с регулярным выражением
if (preg_match($regex, $uri, $uriMatches)) {
// Шаг 4: Проверяем, что параметр 'context' в URI соответствует регулярному выражению из 'where'
if (isset($uriMatches[1])) { // Смотрим на первый параметр (context)
$contextValue = $uriMatches[1]; // Значение параметра 'context'
// Проверяем, соответствует ли значение 'context' регулярному выражению из where
if (isset($routeData['where']['context'])) {
$contextConstraint = $routeData['where']['context']; // Регулярка для 'context'
if (!preg_match('#^' . $contextConstraint . '$#', $contextValue)) {
echo 'NOOOOO'; // Значение 'context' не прошло проверку
} else {
echo 'context matches'; // Значение 'context' прошло проверку
}
}
}
} else {
echo 'URI does not match the pattern';
}