Я пытаюсь проверить URL в нескольких форматах. НАПРИМЕР:

https://www.google.com OK
http://www.google.com  OK
www.google.com     OK
htt://www.google.com
://www.google.com
https://google.com  OK
http\\www.google.com
http:\\www.google.com
http:\\www.google.com
http://computerName/abc/MenuItems.aspx OK
https://computerName/abc/MenuItems.aspx OK
http://www.a.com/abc/ms.aspx?Id=13&(Not.Licensed.For.Production)= OK
http://www.a.com/abc/ms.aspx?Id=13 OK

Я использую это регулярное выражение

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

Но последние два пункта не в порядке. Как я могу также проверить URL-адреса без www и, например, (.com) Я попытался удалить часть (что, я думаю, проверяет .com, но безуспешно.

Это почти работает, но обнаружил новые случаи последних двух, которые не работают Вот мой пример https://regex101.com/r/w3dQSl/5

0
Luis 28 Апр 2020 в 18:04

2 ответа

Лучший ответ

Для ссылок вашего примера вы можете использовать

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

Шаблон будет соответствовать:

  • ^ Начало строки
  • https?:\/\/ Сопоставить протокол с необязательными s и ://
  • [a-z0-9]+ Соответствует 1+ раз любому из перечисленных
  • (?:[-.][a-z0-9]+)* Повторите 0+ раз любой из перечисленных элементов, которым предшествует - или .
  • (?::[0-9]{1,5})? При желании совпадение : и 1-5 цифр
  • (?:\/[^\/\r\n]+)* Повторите 0+ раз / и любой символ, кроме /
  • \.[a-z]{2,5} Соответствует . и 2-5 раз символу a-z
  • (?:[?#]\S*)? При желании может соответствовать ? или # и 0+ раз любому непробельному символу
  • $ конец строки

Regex demo

1
The fourth bird 6 Май 2020 в 16:08

Вам следует подумать о том, какие URL вы пытаетесь сопоставить, но для ваших примеров это делает свою работу и также проще, чем начальное регулярное выражение, которое вы предоставили:

^(https?://)?(www\.)?[a-zA-Z0-9-]+[a-zA-Z0-9_\-/\.\?=\&\(\)]+$

При желании вы можете сделать некоторые группы не захватываемыми, добавив ?: после открывающих скобок.

Regular expression visualization

Debuggex Demo

-1
Xaser 6 Май 2020 в 16:32