function validateURL(url) { const pattern = new RegExp('^(https?:\\/\\/)?' + // проверка на протокол '((([a-zA-Z\\d]([a-zA-Z\\d-]*[a-zA-Z\\d])*)\\.)+[a-zA-Z]{2,}|' + // доменные имена '((\\d{1,3}\\.){3}\\d{1,3}))' + // или IP (v4) адреса '(\\:\\d+)?(\\/[-a-zA-Z\\d%_.~+]*)*' + // порт и путь '(\\?[;&a-zA-Z\\d%_.~+=-]*)?' + // параметры запроса '(\\#[-a-zA-Z\\d_]*)?$', 'i'); // якорь (фрагмент) return pattern.test(url); } document.addEventListener("DOMContentLoaded", e => { console.log("App start"); const form = document.querySelector(".main-form"); const startBtn = document.querySelector("[data-start-download]"); const urlToPlaylistInp = document.querySelector("[name='url-to-playlist']"); const playlistNameInp = document.querySelector("[name='playlist-name']"); form.resetValidationClasses = () => form.querySelectorAll(".is-invalid").forEach(i => i.classList.remove("is-invalid")); form.querySelectorAll("input").forEach(i => i.addEventListener("input", e => { e.currentTarget.classList.remove("is-invalid"); })); startBtn.addEventListener("click", e => { if(startBtn.classList.contains("disabled")) { return; } form.resetValidationClasses(); let plUrl = urlToPlaylistInp.value; let plName = playlistNameInp.value; let dataIsValid = true; if(!plUrl.length || !validateURL(plUrl)) { urlToPlaylistInp.classList.add("is-invalid"); dataIsValid = false; } if(plName.length < 4) { playlistNameInp.classList.add("is-invalid"); dataIsValid = false; } if(!dataIsValid) { return; } }); });