Hi! Could we please enable some services and cookies to improve your experience and our website?

PHPize Online / SQLize Online  /  SQLtest Online

A A A
Login    Share code      Blog   FAQ

Online Sandbox for SQL and PHP: Write, Run, Test, and Share SQL Queries and PHP Code

Copy Format Clear

Stuck with a problem? Got Error? Ask AI support!

Copy Clear
Copy Format Clear
<?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) use ($routeData) { $param = $match[1]; if (isset($routeData['where'][$param])) { return '(' . $routeData['where'][$param] . ')'; // Применяем регулярное выражение из 'where' } else { return '([^/]+)'; // Если для параметра нет условия, захватываем любое значение } }, $pattern ); // Шаг 3: Обрабатываем необязательные параметры (с учетом ?) $regex = str_replace('{alias?}', '([^/]+)?', $regex); // Добавляем начало и конец регулярного выражения $regex = '#^' . $regex . '$#'; // Выводим итоговое регулярное выражение для отладки var_dump($regex); // Шаг 4: Сопоставляем URI с регулярным выражением if (preg_match($regex, $uri, $uriMatches)) { // Шаг 5: Проверяем, что параметр 'context' в URI соответствует регулярному выражению из 'where' var_dump($uriMatches); // Выводим совпавшие параметры для отладки if (isset($uriMatches[1])) { // Проверяем значение 'context' $contextValue = $uriMatches[1]; // Значение 'context' if (!preg_match('#^' . $routeData['where']['context'] . '$#', $contextValue)) { echo 'NOOOOO'; // Значение 'context' не прошло проверку } else { echo 'context matches'; // Значение 'context' прошло проверку } } } else { echo 'URI does not match the pattern'; }
Copy Clear