近期多次遇到檢測URL是否合法問題,每次都一通百度谷歌,重復(fù)勞動。所以,把相關(guān)問題總結(jié)如下。
URL合法性

來源于 維基百科
包含的合法字符
URL 的合法字符包括 0-9、A-Z、a-z 和特殊字符:$-_.,+!*’()#%
JavaScript檢測實現(xiàn)
有bug,待完善
對于支持URL()對象的瀏覽器
function validateUrl(url) {
var isUrl = false;
try {
var url = new URL(url);
isUrl = true;
} catch(e) {
isUrl = false;
}
return isUrl;
}
對于不支持URL()對象的瀏覽器
- 使用polyfill: polyfill.js - URL,然后調(diào)用以上方法
- 使用正則匹配。沒有找到完美匹配的正則表達(dá)式,簡單的如下:
function validateUrl(url) {
return /^((https|http|ftp|rtsp|mms)?:\/\/)?[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=?%\-&_~`@[\]':+!]*([^<>"])*$/.test(url);
}
小結(jié)
由于URL組成的復(fù)雜性,很難找到一個可以檢測所有URL合法性的正則。所以,在使用URL的具體場景中,最好給定一個合法格式范圍,范圍外則判定為不合法。