Как поправить regexp, чтобы url валидировался правильно?

Нужно написать функцию, проверяющую url на валидность. Перерыл весь интернет, но пока максимально адекватное решение нашет здесь. Но и оно не идеально.

Основная функция и регулярка выглядят так:
function checkUrl(url) {
    const pattern = /(http|https):\/\/([a-z0-9-]+((\.[a-z0-9-]+)+)?)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
    return pattern.test(url);
}


В большинстве случаев работает норм, но на таких кейсах спотыкается:
checkUrl('https://google') // true, а должно быть false
checkUrl('https://www.google') // true, а должно быть false
checkUrl('https://wwww.google.com/') // true, а должно быть false
checkUrl('www.google.com') // false, а должно быть true


Как можно доработать регулярку, чтобы вышеупомянутые ситуации обрабатывались правильно?

UPD: С двумя первыми примерами, наверное, можно не заморачиваться, т.к. в отдельных ситуациях строки, построенные по такому принципу, являются валидными урлами.
Третий пример - тоже неактуален, не знал, что символов w может быть больше 3-х
Остается актуальным 4 пример.
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 1
iMedved2009
@iMedved2009
Не люблю людей
filter_var($url, FILTER_VALIDATE_URL);

Но он валидирует согласно www.faqs.org/rfcs/rfc2396.html, и https://google - валидный урл. как и https://www.google

но 4 решается быстро

/((http|https):\/\/)?([a-z0-9-]+((\.[a-z0-9-]+)+)?)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/


https://regex101.com/r/sfkAvS/1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы