регулярное выражение соответствует URL-пути только с указанными c символами? - PullRequest
1 голос
/ 19 апреля 2020

Я ищу регулярное выражение в PHP, чтобы найти простой URL-путь с указанными c символами и не более.

Мое регулярное выражение не работает точно (отметьте «gm» только для теста. В рабочий процесс, пожалуйста, без 'g' для более точного.):

/^\/[A-Za-z0-9-]+\/?[A-Za-z0-9-]+\/?[A-Za-z0-9-]+\/?[A-Za-z0-9-]+\/?$/gm

URL-путь Примеры с комментарием:

#match: YES
/
/trip-001
/trip-001/
/trip-001/summer-2019
/trip-001/summer-2019/
/trip-001/summer-2019/ibiza-001/
/trip-001/summer-2019/ibiza-001/PICT-001

#match: NO
//
trip-001
trip-001/
trip-001/summer-2019
trip-001/summer-2019/
trip-001/summer-2019/ibiza-001/
trip-001/summer-2019/ibiza-001/PICT-001

//trip-001
trip-001//
//trip-001/summer-2019
//trip-001//summer-2019
trip-001//summer-2019
//trip-001/summer-2019/
//trip-001//summer-2019//
trip-001//summer-2019/
trip-001/summer-2019//
trip-001/summer-2019/
trip-001/summer-2019/ibiza-001/
//trip-001/summer-2019/ibiza-001/
//trip-001//summer-2019/ibiza-001/
//trip-001/summer-2019//ibiza-001/
//trip-001/summer-2019/ibiza-001//
trip-001/summer-2019/ibiza-001//
trip-001/summer-2019/ibiza-001/
trip-001/summer-2019/ibiza-001/PICT-001
//trip-001/summer-2019/ibiza-001/PICT-001
# and similar

/trip-001/summer-2019/ibiza-001/PICT-001/
/trip-001/summer-2019/ibiza-001/whatever-987/PICT001
/trip-001/summer-2019/ibiza-001/whatever-987/PICT001/

trip-001/summer-2019/ibiza-001/PICT-001/
trip-001/summer-2019/ibiza-001/whatever-987/PICT001
trip-001/summer-2019/ibiza-001/whatever-987/PICT001/

Я понятия не имею, что он работает с {n}.

Только эта кодировка: A-Z a-z 0-9 - / и точно не более. Пожалуйста, не \d для цифр.

Это для! Preg_match () в PHP.

РЕДАКТИРОВАТЬ: ведущий sla sh является обязательным условием. Двойной сл sh и более не допускается. Трейлинг сл sh да или нет.

1 Ответ

1 голос
/ 19 апреля 2020

Похоже, что URL-адрес должен быть действительным только при наличии не более 5 слешей.

Вы можете настроить свой шаблон как

^(?!(?:[^\/]*\/){5})(?:(?:\/[A-Za-z0-9-]+){1,4}\/?|\/)$

См. regex demo

Подробности

  • ^ - начало строки
  • (?!(?:[^\/]*\/){5}) - отрицательный прогноз, который не дает совпадения при наличии 5 вхождения / символов в строке
  • (?: - начало группы без захвата:
    • (?:\/[A-Za-z0-9-]+){1,4}\/? - от 1 до 4 вхождений / и 1+ ASCII alphanumeri c или - символов, а затем необязательный / char
    • | - или
    • \/ - один / символ в строке
  • ) - конец группы без захвата
  • $ - конец строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...