Проблема, соответствующая точному слову - PullRequest
1 голос
/ 13 мая 2019

Я создаю регулярное выражение валидатора веб-сайта, которое может соответствовать URL.

Дело в том, что 90% работает! Это входит и выходит из моего совпадения строк, где проблема.

Мое регулярное выражение: (http (s?): // www. | Www. | Http (s?): //) + [a-z0-9] + ([-.] {1} [а-z0-9] +) [AZ] {2,5} (:.? [0-9] {1,5}) (/.)

Моя строка для проверки:

1) (Это должно дать сбой, но оно проходит) https://www.xy

2) (Это должно пройти, что оно и делает) https://www.xy.com

Он продолжает входить в мою группу (http (s?): //) вместо группы ((http (s?): // www.)

Есть идеи, как это решить?

URL, который я хочу передать:

http://www.test.com

http://test.com

https://test.com

https://www.test.com

URL-адрес, по которому я хочу перейти: http://www.bla https://www.ggg

Таким образом, если он соответствует https://www. или http://www., он должен использовать правильную группу, а затем применить оставшееся регулярное выражение, где он проверяет, что он содержит .. test.com или т. Д.

This is using correct Group This is using the wrong Group

1 Ответ

1 голос
/ 14 мая 2019

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

^(?:https?:\/\/)?(?!www\.[^.]+$)(?:www\.)?[a-z0-9]+(?:[-.][a-z0-9]+)*\.[a-z]{2,5}(?::[0-9]{1,5})?(\/.*)?$

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

Подробности

  • ^- начало строки
  • (?:https?:\/\/)? - необязательный http:// или https://
  • (?!www\.[^.]+$) - отрицательный прогноз, который не дает совпадения, если непосредственно справа от текущей позиции естьравен www., а затем любые 1+ символов, отличных от точки до конца строки
  • (?:www\.)? - необязательные www.
  • [a-z0-9]+ - 1+ строчные буквы и цифры
  • (?:[-.][a-z0-9]+)* - 0 или более повторений - или ., а затем 1+ строчных букв и цифр
  • \. - a .
  • [a-z]{2,5} - от двух до пяти строчных букв
  • (?::[0-9]{1,5})? - необязательная последовательность : и от 1 до 5 цифр
  • (\/.*)? - необязательная последовательность / иостаток строки
  • $ - конец строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...