Получение nil при сопоставлении правильного регулярного выражения для URL с backla sh и параметрами Rails 6 - PullRequest
1 голос
/ 07 апреля 2020

Я тестирую регулярное выражение, которое позволяет мне проверить, соответствует ли текущая строка URL-адресу https: // или http: // http://it_tv.sharepoint.com. Это работает до такой степени, что он проверяет, совпадает ли URL, когда я делаю https://it_tv.sharepoint.com. То, что я хотел бы случиться, это возможность включить http://it_tv.sharepoint.com / resources .... / 22 * ​​1009 * в этом смысле. Мне нужно, чтобы он считался действительным, когда к URL-адресу подключен ресурс или расширение. http://it_tv.sharepoint.com / resources также должно соответствовать true. Есть ли способ добавить подстановочный знак для части / выражения регулярного выражения?

url_validator.rb

if "https://it_tv.sharepoint.com/".match(%r{^(http[s]?://|)(www.)?it_tv.sharepoint.com($|/$)})
 # => returns true

if "https://it_tv.sharepoint.com/resource/1005".match(%r{^(http[s]?://|)(www.)?it_tv.sharepoint.com($|/$)})
 # => returns false/nil

1 Ответ

0 голосов
/ 07 апреля 2020

Вы можете использовать

%r{\A(?:https?://)?(?:www\.)?it_tv\.sharepoint\.com(?:/.*)?\z}

См. Демоверсию regex

Подробности

  • \A - начало строки
  • (?:https?://)? - необязательная подстрока, https:// или http://
  • (?:www\.)? - необязательная www. подстрока
  • it_tv\.sharepoint\.com - подстрока it_tv.sharepoint.com
  • (?:/.*)? - необязательный /, за которым следуют любые 0+ символов, кроме символов разрыва строки, как можно больше, последовательность символов
  • \z - конец строки.

Если вы хотите указать хотя бы один не / символ между / с, вы можете использовать

%r{\A(?:https?://)?(?:www\.)?it_tv\.sharepoint\.com(?:/[^/]+)*/?\z}

, где (?:/[^/]+)*/? соответствует 0 или более вхождений /, а затем 1+ символов, отличных от /, а затем необязательный / (то есть в конце строки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...