Правила RegEx для принудительного начала строки и разрешения ссылок в интрасети - PullRequest
0 голосов
/ 25 июня 2019

Мне нужен RegEx, используемый в JavaScript для соответствия некоторым правилам URL:

  • Должен начинаться с http, https, ftp, ftps или mailto: (обязательно)
  • www необязательно
  • a-z, A-Z, 0-9 и некоторые специальные символы .:-/ разрешены

Поскольку яЯ не очень знаком с RegEx. Я пытался использовать это, найденное в ответе (второй ответ @foufos): Что такое хорошее регулярное выражение для соответствия URL?

/^(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9/]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9/]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9/]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})

Теперь этоRegEx соответствует всем нужным ссылкам, кроме двух: например, http://intranet/index.html mailto:sample@sample.com

Поэтому я попытался изменить его и добавил правило mailto::

/^((http(s)?)|(ftp(s)?):\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,}|(mailto:){1}([\w\.]+)\@{1}[\w]+\.[\w]{2,})\s$/gm;

На данный момент двавсе не работает:

  • Это url соответствует: www.google.com, но не должно, так как должно начинаться с http, https, ftp,ftps или mailto: (обязательно).Я просто поставил ? после (s), поэтому только это должно быть необязательным.Почему это не работает?

  • Это url все еще не соответствует: http://intranet/index.html но я подумал, у меня есть правильное правило для специальных символов .:-/.

ТЕСТИРОВАНИЕ: Список URL, который должен совпадать:

Список URL не должен совпадать: -www.google.com

Любые входы?

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Это регулярное выражение соответствует вашим строкам, но НЕ проверяет их. Это означает - это все еще включает все запрещенные символы - как комы. В письме не должно быть @ - оно просто ищет непробельные символы до конца каждой строки:

(?:(?:(?:(?:http(?:s)?)|(?:ftp(?:s)?)):\/\/)|(?:mailto:))[^\s]*
0 голосов
/ 25 июня 2019

Самое простое регулярное выражение:

^(((https?|ftps?):\/\/)|(mailto:))[a-zA-Z0-9\.:\/@-]*$

Вы можете поиграть с ним здесь https://regex101.com/r/F1SqQo/1

Он не проверяет, соответствует ли URL всем правилам или действительности адреса электронной почты.

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