使用JavaScript校驗(yàn)URL的方法小結(jié)
1.使用 URL 構(gòu)造函數(shù)來(lái)驗(yàn)證 URL
當(dāng)傳遞一個(gè)字符串給 URL 構(gòu)造函數(shù)時(shí),如果字符串是一個(gè)有效的 URL,將返回一個(gè)新的 URL 對(duì)象。否則,將返回一個(gè)錯(cuò)誤。
const url = new URL('../cats', 'http://www.example.com/dogs');
console.log(url.hostname); // "www.example.com"
console.log(url.pathname); // "/cats"
在控制臺(tái)得到的 URL 對(duì)象:

當(dāng)傳遞一個(gè)無(wú)效的 URL 字符串:
const exampleUrl = new URL('example');
console.log(exampleUrl);
字符串 'example' 不是一個(gè)有效的 URL。因此,會(huì)報(bào)錯(cuò) TypeError:

1.1 使用 URL 構(gòu)造函數(shù)創(chuàng)建一個(gè) URL 驗(yàn)證器函數(shù)
使用 URL 構(gòu)造函數(shù)和 try...catch 語(yǔ)句,創(chuàng)建一個(gè)函數(shù):
function isValidUrl(string) {
try {
new URL(string);
return true;
} catch (err) {
return false;
}
}
如果參數(shù)是一個(gè)有效的 URL 時(shí),isValidUrl 函數(shù)返回 true。否則,返回 false:
console.log(isValidUrl('https://www.example.com/')); // true
console.log(isValidUrl('mailto://mail@example.com')); // true
console.log(isValidUrl('freecodecamp')); // false
瀏覽器兼容性:
大部分瀏覽器都支持的

1.2 使用 URL 構(gòu)造器只驗(yàn)證 HTTP URL
要檢查url是否是一個(gè)有效的 HTTP URL,不要其他有效的 URL,如 'mailto://mail@example.com'。
要檢查url是否是一個(gè)有效的 HTTP URL,可以使用 URL 對(duì)象的 protocol 屬性:
function isValidHttpUrl(string) {
try {
const newUrl = new URL(string);
return newUrl.protocol === 'http:' || newUrl.protocol === 'https:';
} catch (err) {
return false;
}
}
console.log(isValidUrl('https://www.example.com/')); // true
console.log(isValidUrl('mailto://mail@example.com')); // false
console.log(isValidUrl('freecodecamp')); // false
2.使用 npm 包來(lái)驗(yàn)證 URL
NPM 包:is-url 和 is-url-http
2.1 使用 is-url 包驗(yàn)證 URL
使用 is-url 包來(lái)檢查一個(gè)字符串是否是一個(gè)有效的 URL。這個(gè)包并不檢查傳遞給它的 URL 的協(xié)議。
安裝:
npm install is-url --save
使用:
import isUrl from 'is-url';
const firstCheck = isUrl('https://kikobeats.com'); // true
const secondCheck = isUrl('mailto://kiko@beats.com'); // true
const thirdCheck = isUrl('example'); // false
2.2 使用 is-url-http 包來(lái)驗(yàn)證 HTTP URL
安裝:
npm install is-url-http --save
使用:
import isUrlHttp from 'is-url-http';
isUrlHttp('https://kikobeats.com') // ==> true
isUrlHttp('https://kikobeats.com') // ==> true
isUrlHttp('mailto://kiko@beats.com') // ==> false
isUrlHttp('callto:192.168.103.77+type=ip') // ==> false
3.使用 Regex 來(lái)驗(yàn)證 URL
使用正則表達(dá)式來(lái)檢查一個(gè)url是否是有效的 URL
所有有效的 URL 都遵循一個(gè)特定的模式。它們有三個(gè)主要部分,分別是:
協(xié)議
域名(或 IP 地址)
端口和路徑
有時(shí)路徑后面是一個(gè)查詢字符串或片段定位符。
3.1 使用正則驗(yàn)證 URL
function isValidUrl(str) {
const pattern = new RegExp(
'^([a-zA-Z]+:\\/\\/)?' + // protocol
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name
'((\\d{1,3}\\.){3}\\d{1,3}))' + // OR IP (v4) address
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
'(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
'(\\#[-a-z\\d_]*)?$', // fragment locator
'i'
);
return pattern.test(str);
}
console.log(isValidUrl('https://www.kikobeats.com/')); // true
console.log(isValidUrl('mailto://kikobeats.com')); // true
console.log(isValidUrl('example')); // false
3.2 使用正則驗(yàn)證 HTTP URL
要使用正則來(lái)檢查一個(gè)url是否是有效的 HTTP URL,需要使用協(xié)議檢查。
使用 '^(https?:\/\/)?',而不是 ^([a-zA-Z]+:\/\/)?:
function isValidHttpUrl(str) {
const pattern = new RegExp(
'^(https?:\\/\\/)?' + // protocol
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // domain name
'((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
'(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
'(\\#[-a-z\\d_]*)?$', // fragment locator
'i'
);
return pattern.test(str);
}
console.log(isValidUrl('https://www.kikobeats.com/')); // true
console.log(isValidUrl('mailto://kikobeats.com')); // false
console.log(isValidUrl('example')); // false
以上就是使用JavaScript校驗(yàn)URL的方法小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于JavaScript校驗(yàn)URL的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
微信小程序開發(fā)之路由切換頁(yè)面重定向問(wèn)題
這篇文章主要介紹了微信小程序開發(fā)之路由切換頁(yè)面重定向問(wèn)題,又通過(guò)實(shí)例代碼給大家介紹了微信小程序的路由跳轉(zhuǎn)方法,需要的朋友可以參考下2018-09-09
window.onload 加載完畢的問(wèn)題及解決方案(上)
我們經(jīng)常使用 window.onload 來(lái)處理頁(yè)面,當(dāng)頁(yè)面加載完成做一些事情。但這個(gè) window.onload 是頁(yè)面全部加載完成,甚至包括圖片,而我們實(shí)際上經(jīng)常需要的是文檔 DOM 加載完畢!2009-07-07
javascript break指定標(biāo)簽打破多層循環(huán)示例
break的語(yǔ)法有兩種break; 和 break label;下面為大家介紹下直接break掉整個(gè)循環(huán)嵌套示例2014-01-01
JavaScript使用類似break機(jī)制中斷forEach循環(huán)的方法
這篇文章主要介紹了JavaScript使用類似break機(jī)制中斷forEach循環(huán)的方法,需要的朋友可以參考下2018-11-11
JS實(shí)現(xiàn)不規(guī)則TAB選項(xiàng)卡效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)不規(guī)則TAB選項(xiàng)卡效果代碼,通過(guò)簡(jiǎn)單的JavaScript響應(yīng)鼠標(biāo)事件動(dòng)態(tài)變換元素樣式實(shí)現(xiàn)不規(guī)則選項(xiàng)卡效果,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-09-09

