Я думаю, что использование нативного URL API лучше, чем сложные шаблоны регулярных выражений, как предложил @pavlo. У него есть некоторые недостатки, которые мы можем исправить с помощью дополнительного кода. Этот подход не работает для следующего действительного URL.
//cdn.google.com/script.js
Мы можем добавить отсутствующий протокол заранее, чтобы избежать этого. Также не удается обнаружить следующий неверный URL.
http://w
http://..
Так зачем проверять весь URL? мы можем просто проверить домен. Я позаимствовал регулярное выражение для проверки домена с здесь .
function isValidUrl(string) {
if (string && string.length > 1 && string.slice(0, 2) == '//') {
string = 'http:' + string; //dummy protocol so that URL works
}
try {
var url = new URL(string);
return url.hostname && url.hostname.match(/^([a-z0-9])(([a-z0-9-]{1,61})?[a-z0-9]{1})?(\.[a-z0-9](([a-z0-9-]{1,61})?[a-z0-9]{1})?)?(\.[a-zA-Z]{2,4})+$/) ? true : false;
} catch (_) {
return false;
}
}
Атрибут hostname
- это пустая строка для javascript:void(0)
, поэтому он работает и для этого, и вы также можете добавить верификатор IP-адреса. Я бы хотел больше всего придерживаться нативного API и надеюсь, что он начнет поддерживать все в ближайшем будущем.