Nếu bạn muốn kiểm tra xem một chuỗi có hợp lệ URL HTTP hay không, bạn có thể sử dụng Trình xây dựng
var parser = document.createElement['a'];
parser.href = "//example.com:3000/pathname/?search=test#hash";
parser.protocol; // => ""
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
9 [nó sẽ ném vào chuỗi dị dạng]:is valid HTTP URL, you can use var parser = document.createElement['a'];
parser.href = "//example.com:3000/pathname/?search=test#hash";
parser.protocol; // => ""
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
9
constructor [it will throw on malformed string]:function isValidHttpUrl[string] {
let url;
try {
url = new URL[string];
} catch [_] {
return false;
}
return url.protocol === "" || url.protocol === "";
}
console.log["//example.com: "+isValidHttpUrl["//example.com"]];
console.log["example.com: "+isValidHttpUrl["example.com"]];
Lưu ý: Per RFC 3886, URL phải bắt đầu bằng sơ đồ [không giới hạn ở HTTP/HTTPS], e. G .: Per RFC 3886, URL must begin with a scheme [not limited to http/https], e. g.:
0 không phải là URL hợp lệ [sơ đồ thiếu]function isValidURL[str] { var a = document.createElement['a']; a.href = str; return [a.host && a.host != window.location.host]; }
1 là URL hợp lệ, mặc dù không phải là HTTPfunction isValidURL[str] { var a = document.createElement['a']; a.href = str; return [a.host && a.host != window.location.host]; }
2 là URL hợp lệ với máy chủ làfunction isValidURL[str] { var a = document.createElement['a']; a.href = str; return [a.host && a.host != window.location.host]; }
3 [liệu nó có giải quyết hay không phụ thuộc vào DNS của bạn]function isValidURL[str] { var a = document.createElement['a']; a.href = str; return [a.host && a.host != window.location.host]; }
4 là URL hợp lệ, giống như trênfunction isValidURL[str] { var a = document.createElement['a']; a.href = str; return [a.host && a.host != window.location.host]; }
Đã trả lời ngày 18 tháng 4 năm 2017 lúc 8:22Apr 18, 2017 at 8:22
PavlopavloPavlo
41.6K13 Huy hiệu vàng75 Huy hiệu bạc109 Huy hiệu đồng13 gold badges75 silver badges109 bronze badges
27
Một câu hỏi liên quan với câu trả lời
Hoặc RegEXP này từ Devshed:
function validURL[str] {
var 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_]*]?$','i']; // fragment locator
return !!pattern.test[str];
}
Sᴀᴍ onᴇᴌᴀ
8.0628 Huy hiệu vàng32 Huy hiệu bạc58 Huy hiệu Đồng8 gold badges32 silver badges58 bronze badges
Đã trả lời ngày 19 tháng 4 năm 2011 lúc 13:29Apr 19, 2011 at 13:29
Tom Gullentom GullenTom Gullen
60.8k82 Huy hiệu vàng279 Huy hiệu bạc450 Huy hiệu Đồng82 gold badges279 silver badges450 bronze badges
25
function isURL[str] {
var 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_]*]?$','i']; // fragment locator
return pattern.test[str];
}
Cardoso Diogo
20.9K26 Huy hiệu vàng97 Huy hiệu bạc138 Huy hiệu đồng26 gold badges97 silver badges138 bronze badges
Đã trả lời ngày 29 tháng 1 năm 2013 lúc 11:50Jan 29, 2013 at 11:50
ZemljoradnikzemljoradnikZemljoradnik
2.6622 Huy hiệu vàng17 Huy hiệu bạc24 Huy hiệu đồng2 gold badges17 silver badges24 bronze badges
17
Thay vì sử dụng một biểu thức thông thường, tôi khuyên bạn nên sử dụng một phần tử neo.
Khi bạn đặt thuộc tính
function isValidURL[str] {
var a = document.createElement['a'];
a.href = str;
return [a.host && a.host != window.location.host];
}
5 của function isValidURL[str] {
var a = document.createElement['a'];
a.href = str;
return [a.host && a.host != window.location.host];
}
6, nhiều thuộc tính khác được đặt.var parser = document.createElement['a'];
parser.href = "//example.com:3000/pathname/?search=test#hash";
parser.protocol; // => ""
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
nguồn
Tuy nhiên, nếu giá trị
function isValidURL[str] {
var a = document.createElement['a'];
a.href = str;
return [a.host && a.host != window.location.host];
}
5 bị ràng buộc không phải là URL hợp lệ, thì giá trị của các thuộc tính phụ đó sẽ là chuỗi trống.Chỉnh sửa: Như đã chỉ ra trong các bình luận: Nếu một URL không hợp lệ được sử dụng, các thuộc tính của URL hiện tại có thể được thay thế. as pointed out in the comments: if an invalid url is used, the properties of the current URL may be substituted.
Vì vậy, miễn là bạn không chuyển trong URL của trang hiện tại, bạn có thể làm một cái gì đó như:
function isValidURL[str] {
var a = document.createElement['a'];
a.href = str;
return [a.host && a.host != window.location.host];
}
Đã trả lời ngày 9 tháng 1 năm 2016 lúc 15:00Jan 9, 2016 at 15:00
LukelukeLuke
5.4474 Huy hiệu vàng35 Huy hiệu bạc63 Huy hiệu Đồng4 gold badges35 silver badges63 bronze badges
12
Tôi đang sử dụng chức năng dưới đây để xác thực URL có hoặc không có
function isValidURL[str] {
var a = document.createElement['a'];
a.href = str;
return [a.host && a.host != window.location.host];
}
8:function isValidURL[string] {
var res = string.match[/[http[s]?:\/\/.]?[www\.]?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b[[-a-zA-Z0-9@:%_\+.~#?&//=]*]/g];
return [res !== null]
};
var testCase1 = "//en.wikipedia.org/wiki/Procter_&_Gamble";
console.log[isValidURL[testCase1]]; // return true
var testCase2 = "//www.google.com/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&docid=nIv5rk2GyP3hXM&tbnid=isiOkMe3nCtexM:&ved=0CAUQjRw&url=http%3A%2F%2Fanimalcrossing.wikia.com%2Fwiki%2FLion&ei=ygZXU_2fGKbMsQTf4YLgAQ&bvm=bv.65177938,d.aWc&psig=AFQjCNEpBfKnal9kU7Zu4n7RnEt2nerN4g&ust=1398298682009707";
console.log[isValidURL[testCase2]]; // return true
var testCase3 = "//sdfasd";
console.log[isValidURL[testCase3]]; // return false
var testCase4 = "dfdsfdsfdfdsfsdfs";
console.log[isValidURL[testCase4]]; // return false
var testCase5 = "magnet:?xt=urn:btih:123";
console.log[isValidURL[testCase5]]; // return false
var testCase6 = "//stackoverflow.com/";
console.log[isValidURL[testCase6]]; // return true
var testCase7 = "//w";
console.log[isValidURL[testCase7]]; // return false
var testCase8 = "//sdfasdp.ppppppppppp";
console.log[isValidURL[testCase8]]; // return false
Đã trả lời ngày 16 tháng 4 năm 2018 lúc 4:04Apr 16, 2018 at 4:04
Vikasdeep Singhvikasdeep SinghVikasdeep Singh
Huy hiệu vàng 20.2k1177 Huy hiệu bạc100 Huy hiệu đồng11 gold badges77 silver badges100 bronze badges
15
Để xác thực URL bằng JavaScript được hiển thị bên dưới
function ValidURL[str] {
var regex = /[?:https?]:\/\/[\w+:?\w*]?[\S+][:\d+]?[\/|\/[[\w#!:.?+=&%!\-\/]]]?/;
if[!regex .test[str]] {
alert["Please enter valid URL."];
return false;
} else {
return true;
}
}
Cobrexus
4.0793 Huy hiệu vàng19 Huy hiệu bạc41 Huy hiệu đồng3 gold badges19 silver badges41 bronze badges
Đã trả lời ngày 14 tháng 5 năm 2015 lúc 4:11May 14, 2015 at 4:11
2
Dựa vào thư viện: //www.npmjs.com/package/valid-url
import { isWebUri } from 'valid-url';
// ...
if [!isWebUri[url]] {
return "Not a valid url.";
}
Pavlo
41.6K13 Huy hiệu vàng75 Huy hiệu bạc109 Huy hiệu đồng13 gold badges75 silver badges109 bronze badges
Một câu hỏi liên quan với câu trả lờiOct 20, 2016 at 2:38
1
Hoặc RegEXP này từ Devshed:
- Sᴀᴍ onᴇᴌᴀ
- 8.0628 Huy hiệu vàng32 Huy hiệu bạc58 Huy hiệu Đồng
- Đã trả lời ngày 19 tháng 4 năm 2011 lúc 13:29
- Tom Gullentom Gullen
- 60.8k82 Huy hiệu vàng279 Huy hiệu bạc450 Huy hiệu Đồng
Cardoso Diogo
isURL[str] { var pattern = new RegExp['^[[ft|htt]ps?:\\/\\/]?'+ // protocol '[[[[a-z\\d][[a-z\\d-]*[a-z\\d]]*]\\.]+[a-z]{2,}|'+ // domain name and extension '[[\\d{1,3}\\.]{3}\\d{1,3}]]'+ // OR ip [v4] address '[\\:\\d+]?'+ // port '[\\/[-a-z\\d%@_.~+&:]*]*'+ // path '[\\?[;&a-z\\d%@_.,~+&:=-]*]?'+ // query string '[\\#[-a-z\\d_]*]?$','i']; // fragment locator return pattern.test[str]; }
20.9K26 Huy hiệu vàng97 Huy hiệu bạc138 Huy hiệu đồng
Đã trả lời ngày 29 tháng 1 năm 2013 lúc 11:506 silver badges23 bronze badges
ZemljoradnikzemljoradnikAug 8, 2017 at 11:55
2.6622 Huy hiệu vàng17 Huy hiệu bạc24 Huy hiệu đồngTim Truston
Thay vì sử dụng một biểu thức thông thường, tôi khuyên bạn nên sử dụng một phần tử neo.6 gold badges46 silver badges59 bronze badges
8
Khi bạn đặt thuộc tính
function isValidURL[str] {
var a = document.createElement['a'];
a.href = str;
return [a.host && a.host != window.location.host];
}
5 của function isValidURL[str] {
var a = document.createElement['a'];
a.href = str;
return [a.host && a.host != window.location.host];
}
6, nhiều thuộc tính khác được đặt. const isUrl = string => {
try { return Boolean[new URL[string]]; }
catch[e]{ return false; }
}
nguồnMar 14, 2018 at 17:05
Tuy nhiên, nếu giá trị
function isValidURL[str] {
var a = document.createElement['a'];
a.href = str;
return [a.host && a.host != window.location.host];
}
5 bị ràng buộc không phải là URL hợp lệ, thì giá trị của các thuộc tính phụ đó sẽ là chuỗi trống.Aral RocaChỉnh sửa: Như đã chỉ ra trong các bình luận: Nếu một URL không hợp lệ được sử dụng, các thuộc tính của URL hiện tại có thể được thay thế.8 gold badges46 silver badges78 bronze badges
2
Vì vậy, miễn là bạn không chuyển trong URL của trang hiện tại, bạn có thể làm một cái gì đó như:
ES6
function validURL[str] {
var 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_]*]?$','i']; // fragment locator
return !!pattern.test[str];
}
0Đã trả lời ngày 9 tháng 1 năm 2016 lúc 15:00
function validURL[str] {
var 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_]*]?$','i']; // fragment locator
return !!pattern.test[str];
}
1Lukeluke
5.4474 Huy hiệu vàng35 Huy hiệu bạc63 Huy hiệu Đồng
function validURL[str] {
var 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_]*]?$','i']; // fragment locator
return !!pattern.test[str];
}
2Tôi đang sử dụng chức năng dưới đây để xác thực URL có hoặc không có
function isValidURL[str] {
var a = document.createElement['a'];
a.href = str;
return [a.host && a.host != window.location.host];
}
8:function validURL[str] {
var 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_]*]?$','i']; // fragment locator
return !!pattern.test[str];
}
3Đã trả lời ngày 16 tháng 4 năm 2018 lúc 4:04Jun 22, 2019 at 12:48
Vikasdeep Singhvikasdeep SinghIlyich
Huy hiệu vàng 20.2k1177 Huy hiệu bạc100 Huy hiệu đồng1 gold badge33 silver badges27 bronze badges
4
Để xác thực URL bằng JavaScript được hiển thị bên dưới
function validURL[str] {
var 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_]*]?$','i']; // fragment locator
return !!pattern.test[str];
}
4
CobrexusApr 18, 2018 at 22:24
4.0793 Huy hiệu vàng19 Huy hiệu bạc41 Huy hiệu đồngRyan Breece
Đã trả lời ngày 14 tháng 5 năm 2015 lúc 4:1110 silver badges16 bronze badges
3
Dựa vào thư viện: //www.npmjs.com/package/valid-url
Pavlo
function validURL[str] {
var 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_]*]?$','i']; // fragment locator
return !!pattern.test[str];
}
5Đã trả lời ngày 20 tháng 10 năm 2016 lúc 2:38
Có một kho lưu trữ khác mà tôi đã thấy thậm chí có thể tốt hơn đối với ISURL tại Dperini/Regex-Weburl.js, nhưng nó rất phức tạp. Nó có một danh sách kiểm tra lớn hơn các URL hợp lệ và không hợp lệ. Cái đơn giản ở trên vẫn vượt qua tất cả các mặt tích cực và chỉ không chặn được một vài tiêu cực kỳ lạ như
function isValidURL[string] {
var res = string.match[/[http[s]?:\/\/.]?[www\.]?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b[[-a-zA-Z0-9@:%_\+.~#?&//=]*]/g];
return [res !== null]
};
var testCase1 = "//en.wikipedia.org/wiki/Procter_&_Gamble";
console.log[isValidURL[testCase1]]; // return true
var testCase2 = "//www.google.com/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&docid=nIv5rk2GyP3hXM&tbnid=isiOkMe3nCtexM:&ved=0CAUQjRw&url=http%3A%2F%2Fanimalcrossing.wikia.com%2Fwiki%2FLion&ei=ygZXU_2fGKbMsQTf4YLgAQ&bvm=bv.65177938,d.aWc&psig=AFQjCNEpBfKnal9kU7Zu4n7RnEt2nerN4g&ust=1398298682009707";
console.log[isValidURL[testCase2]]; // return true
var testCase3 = "//sdfasd";
console.log[isValidURL[testCase3]]; // return false
var testCase4 = "dfdsfdsfdfdsfsdfs";
console.log[isValidURL[testCase4]]; // return false
var testCase5 = "magnet:?xt=urn:btih:123";
console.log[isValidURL[testCase5]]; // return false
var testCase6 = "//stackoverflow.com/";
console.log[isValidURL[testCase6]]; // return true
var testCase7 = "//w";
console.log[isValidURL[testCase7]]; // return false
var testCase8 = "//sdfasdp.ppppppppppp";
console.log[isValidURL[testCase8]]; // return false
7 cũng như các IP đặc biệt.may even be better for isURL at dperini/regex-weburl.js, but it is highly complex. It has a bigger test list of valid and invalid URLs. The simple one above still passes all the positives and only fails to block a few odd negatives like function isValidURL[string] {
var res = string.match[/[http[s]?:\/\/.]?[www\.]?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b[[-a-zA-Z0-9@:%_\+.~#?&//=]*]/g];
return [res !== null]
};
var testCase1 = "//en.wikipedia.org/wiki/Procter_&_Gamble";
console.log[isValidURL[testCase1]]; // return true
var testCase2 = "//www.google.com/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&docid=nIv5rk2GyP3hXM&tbnid=isiOkMe3nCtexM:&ved=0CAUQjRw&url=http%3A%2F%2Fanimalcrossing.wikia.com%2Fwiki%2FLion&ei=ygZXU_2fGKbMsQTf4YLgAQ&bvm=bv.65177938,d.aWc&psig=AFQjCNEpBfKnal9kU7Zu4n7RnEt2nerN4g&ust=1398298682009707";
console.log[isValidURL[testCase2]]; // return true
var testCase3 = "//sdfasd";
console.log[isValidURL[testCase3]]; // return false
var testCase4 = "dfdsfdsfdfdsfsdfs";
console.log[isValidURL[testCase4]]; // return false
var testCase5 = "magnet:?xt=urn:btih:123";
console.log[isValidURL[testCase5]]; // return false
var testCase6 = "//stackoverflow.com/";
console.log[isValidURL[testCase6]]; // return true
var testCase7 = "//w";
console.log[isValidURL[testCase7]]; // return false
var testCase8 = "//sdfasdp.ppppppppppp";
console.log[isValidURL[testCase8]]; // return false
7 as well as the special ips.Dù bạn chọn gì, hãy chạy nó thông qua chức năng này mà tôi đã điều chỉnh từ các bài kiểm tra trên DPERINI/REGEX-WEBUBERL.JS, trong khi sử dụng các công cụ phát triển của trình duyệt của bạn.
function validURL[str] {
var 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_]*]?$','i']; // fragment locator
return !!pattern.test[str];
}
6Và sau đó kiểm tra chuỗi đó của 'A.
Xem so sánh này về Isurl Regex của Mathias Bynens để biết thêm thông tin trước khi bạn đăng một Regex có vẻ tuyệt vời.
Đã trả lời ngày 9 tháng 3 năm 2018 lúc 1:52Mar 9, 2018 at 1:52
Aamarksaamarksaamarks
84210 Huy hiệu bạc16 Huy hiệu đồng10 silver badges16 bronze badges
3
Hàm này không cho phép localhost và chỉ cho phép các URL cho các trang web [tức là chỉ cho phép giao thức HTTP hoặc HTTPS].
Nó cũng chỉ cho phép các ký tự an toàn như được định nghĩa ở đây: //www.urlencoder.io/learn/
function validURL[str] {
var 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_]*]?$','i']; // fragment locator
return !!pattern.test[str];
}
7Đã trả lời ngày 7 tháng 8 năm 2020 lúc 21:04Aug 7, 2020 at 21:04
CRASHALOTCRASHALOTCrashalot
32.9K59 Huy hiệu vàng264 Huy hiệu bạc423 Huy hiệu đồng59 gold badges264 silver badges423 bronze badges
1
.
Mặc dù việc sử dụng URL tương đối giao thức không được khuyến khích [URL liên quan đến giao thức], đôi khi chúng được sử dụng. Để xác thực URL như vậy với biểu thức chính quy, phần giao thức có thể là tùy chọn, ví dụ:
function validURL[str] {
var 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_]*]?$','i']; // fragment locator
return !!pattern.test[str];
}
8Như những người khác đã lưu ý, biểu thức chính quy dường như không phải là cách tiếp cận phù hợp nhất để xác nhận các URL.
Đã trả lời ngày 11 tháng 7 năm 2017 lúc 21:26Jul 11, 2017 at 21:26
Ko Lako lako la
4014 Huy hiệu bạc9 Huy hiệu Đồng4 silver badges9 bronze badges
3
Một chức năng mà tôi đã sử dụng để xác thực "chuỗi" URL là:
function validURL[str] {
var 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_]*]?$','i']; // fragment locator
return !!pattern.test[str];
}
9Hàm này sẽ trả về Boolean cho dù chuỗi là URL.
Examples:
function isURL[str] {
var 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_]*]?$','i']; // fragment locator
return pattern.test[str];
}
0Đã trả lời ngày 31 tháng 1 năm 2018 lúc 3:16Jan 31, 2018 at 3:16
ChrischrisChris
3.1614 Huy hiệu vàng19 Huy hiệu bạc34 Huy hiệu đồng4 gold badges19 silver badges34 bronze badges
Tôi không thể nhận xét về bài đăng đó là #5717133 gần nhất, nhưng dưới đây là cách tôi tìm ra cách để có được @tom-gullen regex hoạt động.
function isURL[str] {
var 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_]*]?$','i']; // fragment locator
return pattern.test[str];
}
1
Đã trả lời ngày 19 tháng 3 năm 2014 lúc 22:34Mar 19, 2014 at 22:34
iamnewtoniamnewtoniamnewton
3193 Huy hiệu bạc9 Huy hiệu Đồng3 silver badges9 bronze badges
2
Đã có rất nhiều câu trả lời, nhưng đây là một đóng góp khác: được lấy trực tiếp từ kiểm tra tính hợp lệ của polyfill
var parser = document.createElement['a'];
parser.href = "//example.com:3000/pathname/?search=test#hash";
parser.protocol; // => ""
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
9, hãy sử dụng phần tử function isValidURL[string] {
var res = string.match[/[http[s]?:\/\/.]?[www\.]?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b[[-a-zA-Z0-9@:%_\+.~#?&//=]*]/g];
return [res !== null]
};
var testCase1 = "//en.wikipedia.org/wiki/Procter_&_Gamble";
console.log[isValidURL[testCase1]]; // return true
var testCase2 = "//www.google.com/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&docid=nIv5rk2GyP3hXM&tbnid=isiOkMe3nCtexM:&ved=0CAUQjRw&url=http%3A%2F%2Fanimalcrossing.wikia.com%2Fwiki%2FLion&ei=ygZXU_2fGKbMsQTf4YLgAQ&bvm=bv.65177938,d.aWc&psig=AFQjCNEpBfKnal9kU7Zu4n7RnEt2nerN4g&ust=1398298682009707";
console.log[isValidURL[testCase2]]; // return true
var testCase3 = "//sdfasd";
console.log[isValidURL[testCase3]]; // return false
var testCase4 = "dfdsfdsfdfdsfsdfs";
console.log[isValidURL[testCase4]]; // return false
var testCase5 = "magnet:?xt=urn:btih:123";
console.log[isValidURL[testCase5]]; // return false
var testCase6 = "//stackoverflow.com/";
console.log[isValidURL[testCase6]]; // return true
var testCase7 = "//w";
console.log[isValidURL[testCase7]]; // return false
var testCase8 = "//sdfasdp.ppppppppppp";
console.log[isValidURL[testCase8]]; // return false
9 với function ValidURL[str] {
var regex = /[?:https?]:\/\/[\w+:?\w*]?[\S+][:\d+]?[\/|\/[[\w#!:.?+=&%!\-\/]]]?/;
if[!regex .test[str]] {
alert["Please enter valid URL."];
return false;
} else {
return true;
}
}
0 để tận dụng kiểm tra tính hợp lệ tích hợp của trình duyệt:function isURL[str] {
var 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_]*]?$','i']; // fragment locator
return pattern.test[str];
}
2Nguồn
Đã trả lời ngày 11 tháng 6 năm 2020 lúc 8:45Jun 11, 2020 at 8:45
Ngón tay Bruno ngón tayBruno Finger
1.7592 huy hiệu vàng23 Huy hiệu bạc41 Huy hiệu đồng2 gold badges23 silver badges41 bronze badges
Điều này khá khó thực hiện với Regex thuần túy vì các URL có nhiều 'sự bất tiện'.
Ví dụ: tên miền có các hạn chế phức tạp đối với dấu gạch nối:
một. Nó được phép có nhiều dấu gạch ngang liên tiếp ở giữa.
b. Nhưng nhân vật đầu tiên và ký tự cuối cùng của tên miền không thể là dấu gạch nối
c. Nhân vật thứ 3 và thứ 4 không thể là dấu gạch nối
Tương tự số cổng chỉ có thể nằm trong phạm vi 1-65535. Điều này rất dễ kiểm tra nếu bạn trích xuất phần cổng và chuyển đổi thành
1 nhưng khá khó để kiểm tra với biểu thức thông thường.function ValidURL[str] { var regex = /[?:https?]:\/\/[\w+:?\w*]?[\S+][:\d+]?[\/|\/[[\w#!:.?+=&%!\-\/]]]?/; if[!regex .test[str]] { alert["Please enter valid URL."]; return false; } else { return true; } }
Cũng không có cách nào dễ dàng để kiểm tra các phần mở rộng tên miền hợp lệ. Một số quốc gia có các lĩnh vực cấp hai [chẳng hạn như 'co.uk'] hoặc phần mở rộng có thể là một từ dài như '.In quốc tế'. Và TLD mới được thêm vào thường xuyên. Loại điều này chỉ có thể được kiểm tra đối với một danh sách được mã hóa cứng. [Xem //en.wikipedia.org/wiki/top-level_domain]
Sau đó, có URL nam châm, địa chỉ FTP, vv Tất cả đều có các yêu cầu khác nhau.
Tuy nhiên, đây là một chức năng xử lý khá nhiều thứ ngoại trừ:
- Trường hợp 1. c
- Chấp nhận số cổng 1-5 chữ số
- Chấp nhận bất kỳ phần mở rộng nào 2-13 ký tự
- Không chấp nhận FTP, nam châm, v.v ...
function isURL[str] {
var 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_]*]?$','i']; // fragment locator
return pattern.test[str];
}
3Đã trả lời ngày 10 tháng 2 năm 2019 lúc 19:51Feb 10, 2019 at 19:51
CanercanerCaner
55.5K35 Huy hiệu vàng170 Huy hiệu bạc176 Huy hiệu đồng35 gold badges170 silver badges176 bronze badges
Mathias Bynens đã biên soạn một danh sách các url nổi tiếng với các URL thử nghiệm. Có rất ít lý do để viết một biểu thức chính quy mới; Chỉ cần chọn một cái hiện có phù hợp với bạn nhất.
Nhưng bảng so sánh cho những regexes đó cũng cho thấy rằng không thể thực hiện xác thực URL với một biểu thức chính quy duy nhất. Tất cả các regexes trong danh sách của Bynens tạo ra các dương tính sai và âm tính sai.
Tôi khuyên bạn nên sử dụng trình phân tích cú pháp URL hiện có [ví dụ
function ValidURL[str] {
var regex = /[?:https?]:\/\/[\w+:?\w*]?[\S+][:\d+]?[\/|\/[[\w#!:.?+=&%!\-\/]]]?/;
if[!regex .test[str]] {
alert["Please enter valid URL."];
return false;
} else {
return true;
}
}
2 trong JavaScript] và sau đó áp dụng các kiểm tra bạn muốn thực hiện đối với dạng phân tích cú pháp và chuẩn hóa của URL. các thành phần của nó. Sử dụng giao diện JavaScript var parser = document.createElement['a'];
parser.href = "//example.com:3000/pathname/?search=test#hash";
parser.protocol; // => ""
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
9 có lợi ích bổ sung mà nó sẽ chỉ chấp nhận các URL đó thực sự được trình duyệt chấp nhận.Bạn cũng nên nhớ rằng các URL không chính xác về mặt kỹ thuật vẫn có thể hoạt động. Ví dụ
function ValidURL[str] {
var regex = /[?:https?]:\/\/[\w+:?\w*]?[\S+][:\d+]?[\/|\/[[\w#!:.?+=&%!\-\/]]]?/;
if[!regex .test[str]] {
alert["Please enter valid URL."];
return false;
} else {
return true;
}
}
4, function ValidURL[str] {
var regex = /[?:https?]:\/\/[\w+:?\w*]?[\S+][:\d+]?[\/|\/[[\w#!:.?+=&%!\-\/]]]?/;
if[!regex .test[str]] {
alert["Please enter valid URL."];
return false;
} else {
return true;
}
}
5, function ValidURL[str] {
var regex = /[?:https?]:\/\/[\w+:?\w*]?[\S+][:\d+]?[\/|\/[[\w#!:.?+=&%!\-\/]]]?/;
if[!regex .test[str]] {
alert["Please enter valid URL."];
return false;
} else {
return true;
}
}
6 đều có một phần tên máy chủ không hợp lệ nhưng mọi trình duyệt tôi biết sẽ cố gắng mở chúng mà không cần khiếu nại và khi bạn chỉ định địa chỉ IP cho những tên không hợp lệ đó trong function ValidURL[str] {
var regex = /[?:https?]:\/\/[\w+:?\w*]?[\S+][:\d+]?[\/|\/[[\w#!:.?+=&%!\-\/]]]?/;
if[!regex .test[str]] {
alert["Please enter valid URL."];
return false;
} else {
return true;
}
}
7 URL đó thậm chí sẽ hoạt động nhưng chỉ trên máy tính của bạn.Do đó, câu hỏi là không quá nhiều cho dù URL có hợp lệ hay không, mà là URL nào hoạt động và nên được cho phép trong một bối cảnh cụ thể.
Nếu bạn muốn thực hiện xác thực URL, có rất nhiều chi tiết và trường hợp cạnh dễ bỏ qua:
- URL có thể chứa thông tin đăng nhập như trong
8.function ValidURL[str] { var regex = /[?:https?]:\/\/[\w+:?\w*]?[\S+][:\d+]?[\/|\/[[\w#!:.?+=&%!\-\/]]]?/; if[!regex .test[str]] { alert["Please enter valid URL."]; return false; } else { return true; } }
- Số cổng phải nằm trong phạm vi 0-65535, nhưng bạn vẫn có thể muốn loại trừ cổng ký tự đại diện 0.
- Số cổng có thể có số không hàng đầu như trong //www.example.com:000080/.
- Địa chỉ IPv4 không có nghĩa là giới hạn ở 4 số nguyên thập phân trong phạm vi 0-255. Bạn có thể sử dụng một đến bốn số nguyên, và chúng có thể là thập phân, bát phân hoặc thập lục phân. URLS //010.010.000010.010/, //0x8.0x8.0x0008.0x8/, //8.8.2056/, //8.526344 Chỉ là những cách viết sáng tạo //8.8.8.8/.
- Cho phép các địa chỉ loopback [//127.0.0.1/], địa chỉ IP riêng [//192.168.1.1], địa chỉ liên kết-local [//169.254.100.200], v.v. sự riêng tư. Ví dụ, nếu bạn cho phép chúng làm địa chỉ của avatar người dùng trong diễn đàn, bạn khiến trình duyệt của người dùng gửi các yêu cầu mạng không mong muốn trong mạng cục bộ của họ và trên Internet về những điều như vậy có thể gây ra những điều buồn cười và không quá buồn cười xảy ra trong nhà của bạn.
- Vì những lý do tương tự, bạn có thể muốn loại bỏ các liên kết để không có tên máy chủ đủ điều kiện, nói cách khác là tên máy chủ mà không có dấu chấm.
- Nhưng tên máy chủ có thể luôn có một dấu chấm dấu [như trong
9].function ValidURL[str] { var regex = /[?:https?]:\/\/[\w+:?\w*]?[\S+][:\d+]?[\/|\/[[\w#!:.?+=&%!\-\/]]]?/; if[!regex .test[str]] { alert["Please enter valid URL."]; return false; } else { return true; } }
- Phần máy chủ của một liên kết có thể chứa các khung góc cho các địa chỉ IPv6 như trong // [:: 1].
- Địa chỉ IPv6 cũng có phạm vi cho các mạng riêng hoặc địa chỉ liên kết địa chỉ, v.v.
- Nếu bạn chặn một số địa chỉ IPv4 nhất định, hãy nhớ rằng ví dụ như //127.0.0.1 và // [:: ffff: 127.0.0.1] trỏ đến cùng một tài nguyên [nếu thiết bị loopback của máy của bạn đã sẵn sàng IPv6 ].
- Phần máy chủ của URL hiện có thể chứa Unicode, do đó phạm vi ký tự
0 chắc chắn không còn đủ.import { isWebUri } from 'valid-url'; // ... if [!isWebUri[url]] { return "Not a valid url."; }
- Nhiều đăng ký cho các miền cấp cao nhất định các hạn chế cụ thể, ví dụ về tập hợp các ký tự Unicode được phép. Hoặc họ chia nhỏ không gian tên của họ [như
1 và nhiều người khác].import { isWebUri } from 'valid-url'; // ... if [!isWebUri[url]] { return "Not a valid url."; }
- Các miền cấp cao không được chứa các chữ số thập phân và dấu gạch nối không được phép trừ khi đối với tiền tố IDN A-Label "XN--".
- Các tên miền cấp cao nhất của Unicode [và mã hóa PunyCode của họ với "XN--"] vẫn chỉ chứa các chữ cái nhưng ai muốn kiểm tra nó trong một regex?
Điều nào trong số những hạn chế và quy tắc áp dụng là một câu hỏi về các yêu cầu và sở thích của dự án.
Gần đây tôi đã viết một trình xác nhận URL cho một ứng dụng web phù hợp với các URL do người dùng cung cấp trong các diễn đàn, mạng xã hội hoặc tương tự. Vui lòng sử dụng nó làm cơ sở cho một cơ sở của riêng bạn:
- Phiên bản JavaScript/TypeScript cho Frontend [Angular]
- Phiên bản perl cho phần phụ trợ
Tôi cũng đã viết một bài đăng trên blog Các chi tiết của xác thực URL với nhiều thông tin chuyên sâu hơn.
Đã trả lời ngày 17 tháng 1 năm 2020 lúc 9:51Jan 17, 2020 at 9:51
Guido Flohrguido FlohrGuido Flohr
1.71112 huy hiệu bạc27 Huy hiệu đồng12 silver badges27 bronze badges
Điều này làm việc với tôi
function isURL[str] {
var 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_]*]?$','i']; // fragment locator
return pattern.test[str];
}
4
Đã trả lời ngày 16 tháng 4 năm 2019 lúc 16:02Apr 16, 2019 at 16:02
2
Có một vài thử nghiệm sử dụng hàm tạo URL không phân định xem đầu vào là đối tượng chuỗi hoặc URL.
function isURL[str] {
var 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_]*]?$','i']; // fragment locator
return pattern.test[str];
}
5Đã trả lời ngày 10 tháng 3 năm 2020 lúc 22:45Mar 10, 2020 at 22:45
greg.arnottgreg.arnottgreg.arnott
1.60217 Huy hiệu bạc16 Huy hiệu đồng17 silver badges16 bronze badges
Tôi đã sửa đổi tất cả các bình luận, ghi chú và nhận xét là chủ đề này và đã tạo ra một biểu thức thường xuyên mới:
function isURL[str] {
var 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_]*]?$','i']; // fragment locator
return pattern.test[str];
}
6Bạn có thể kiểm tra và cải thiện nó ở đây //regexr.com/668mt.
Tôi đã kiểm tra biểu thức này trên các giá trị tiếp theo:
function isURL[str] {
var 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_]*]?$','i']; // fragment locator
return pattern.test[str];
}
7Đã trả lời ngày 24 tháng 9 năm 2021 lúc 12:42Sep 24, 2021 at 12:42
WoonderwoonderWoonder
2814 Huy hiệu bạc4 Huy hiệu đồng4 silver badges4 bronze badges
Nếu bạn có thể thay đổi loại đầu vào, tôi nghĩ rằng giải pháp này sẽ dễ dàng hơn nhiều:
Bạn có thể sử dụng đơn giản
function ValidURL[str] {
var regex = /[?:https?]:\/\/[\w+:?\w*]?[\S+][:\d+]?[\/|\/[[\w#!:.?+=&%!\-\/]]]?/;
if[!regex .test[str]] {
alert["Please enter valid URL."];
return false;
} else {
return true;
}
}
0 trong đầu vào của mình và kiểm tra nó bằng import { isWebUri } from 'valid-url';
// ...
if [!isWebUri[url]] {
return "Not a valid url.";
}
3 trong JSE.g:
your.html
function isURL[str] {
var 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_]*]?$','i']; // fragment locator
return pattern.test[str];
}
8your.js
function isURL[str] {
var 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_]*]?$','i']; // fragment locator
return pattern.test[str];
}
9Đã trả lời ngày 9 tháng 8 năm 2019 lúc 10:39Aug 9, 2019 at 10:39
Nếu bạn cũng cần hỗ trợ
import { isWebUri } from 'valid-url';
// ...
if [!isWebUri[url]] {
return "Not a valid url.";
}
4 thì hãy sử dụng phiên bản sửa đổi này của Regex [DevShed].var parser = document.createElement['a'];
parser.href = "//example.com:3000/pathname/?search=test#hash";
parser.protocol; // => ""
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
0Đã trả lời ngày 13 tháng 1 năm 2020 lúc 23:08Jan 13, 2020 at 23:08
Tôi thay đổi hàm để khớp + thực hiện thay đổi ở đây với các dấu gạch chéo và công việc của nó: [ // và https] cả hai
var parser = document.createElement['a'];
parser.href = "//example.com:3000/pathname/?search=test#hash";
parser.protocol; // => ""
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
1Đã trả lời ngày 4 tháng 2 năm 2020 lúc 18:53Feb 4, 2020 at 18:53
Ashish Guptaashish GuptaAshish Gupta
1.08711 Huy hiệu bạc13 Huy hiệu đồng11 silver badges13 bronze badges
1
Tôi nghĩ rằng sử dụng API URL gốc tốt hơn các mẫu regex phức tạp như @pavlo đề xuất. Nó có một số nhược điểm mặc dù chúng ta có thể sửa chữa bằng một số mã bổ sung. Cách tiếp cận này thất bại đối với URL hợp lệ sau đây.
var parser = document.createElement['a'];
parser.href = "//example.com:3000/pathname/?search=test#hash";
parser.protocol; // => ""
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
2Chúng ta có thể thêm giao thức bị thiếu trước để tránh điều đó. Nó cũng không phát hiện được sau URL không hợp lệ.
var parser = document.createElement['a'];
parser.href = "//example.com:3000/pathname/?search=test#hash";
parser.protocol; // => ""
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
3Vậy tại sao kiểm tra toàn bộ URL? Chúng tôi chỉ có thể kiểm tra miền. Tôi đã mượn regex để xác minh tên miền từ đây. I borrowed the regex to verify domain from here.
var parser = document.createElement['a'];
parser.href = "//example.com:3000/pathname/?search=test#hash";
parser.protocol; // => ""
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
4Thuộc tính
import { isWebUri } from 'valid-url';
// ...
if [!isWebUri[url]] {
return "Not a valid url.";
}
5 là chuỗi trống cho function isValidURL[str] {
var a = document.createElement['a'];
a.href = str;
return [a.host && a.host != window.location.host];
}
1, vì vậy nó cũng hoạt động cho điều đó và bạn cũng có thể thêm trình xác minh địa chỉ IP. Tôi muốn gắn bó với API bản địa nhiều nhất và hy vọng nó bắt đầu hỗ trợ mọi thứ trong tương lai gần.Đã trả lời ngày 16 tháng 4 năm 2018 lúc 22:11Apr 16, 2018 at 22:11
Munim Munnamunim MunnaMunim Munna
Phim thương hiệu vàng 17K66 gold badges26 silver badges56 bronze badges
1
Câu hỏi đặt ra một phương thức xác thực cho một URL như
import { isWebUri } from 'valid-url';
// ...
if [!isWebUri[url]] {
return "Not a valid url.";
}
7, không có giao thức hoặc bất kỳ dấu chấm nào trong tên máy chủ. Vì vậy, đó không phải là vấn đề xác nhận Sintax URL, nhưng kiểm tra xem đó có phải là URL hợp lệ không, bằng cách thực sự gọi nó.Tôi đã thử một số phương thức để biết liệu URL true có tồn tại hay không và có thể gọi được từ bên trong trình duyệt, nhưng không tìm thấy cách nào để kiểm tra với JavaScript tiêu đề phản hồi của cuộc gọi:
- Thêm một phần tử neo là tốt để bắn phương thức
8.import { isWebUri } from 'valid-url'; // ... if [!isWebUri[url]] { return "Not a valid url."; }
- Thực hiện cuộc gọi AJAX đến URL đầy thách thức với
9 là tốt, nhưng có những hạn chế khác nhau do các chính sáchimport { isWebUri } from 'valid-url'; // ... if [!isWebUri[url]] { return "Not a valid url."; }
0 và đó không phải là trường hợp sử dụngisURL[str] { var pattern = new RegExp['^[[ft|htt]ps?:\\/\\/]?'+ // protocol '[[[[a-z\\d][[a-z\\d-]*[a-z\\d]]*]\\.]+[a-z]{2,}|'+ // domain name and extension '[[\\d{1,3}\\.]{3}\\d{1,3}]]'+ // OR ip [v4] address '[\\:\\d+]?'+ // port '[\\/[-a-z\\d%@_.~+&:]*]*'+ // path '[\\?[;&a-z\\d%@_.,~+&:=-]*]?'+ // query string '[\\#[-a-z\\d_]*]?$','i']; // fragment locator return pattern.test[str]; }
1, vì URL có thể không có bất kỳ miền nào bên ngoài miền máy chủ của tôi.isURL[str] { var pattern = new RegExp['^[[ft|htt]ps?:\\/\\/]?'+ // protocol '[[[[a-z\\d][[a-z\\d-]*[a-z\\d]]*]\\.]+[a-z]{2,}|'+ // domain name and extension '[[\\d{1,3}\\.]{3}\\d{1,3}]]'+ // OR ip [v4] address '[\\:\\d+]?'+ // port '[\\/[-a-z\\d%@_.~+&:]*]*'+ // path '[\\?[;&a-z\\d%@_.,~+&:=-]*]?'+ // query string '[\\#[-a-z\\d_]*]?$','i']; // fragment locator return pattern.test[str]; }
- Sử dụng API Fetch có cách giải quyết tương tự như AJAX.
- Vấn đề khác là tôi có máy chủ của mình trong giao thức
2 và ném một ngoại lệ khi gọi các URL không an toàn.isURL[str] { var pattern = new RegExp['^[[ft|htt]ps?:\\/\\/]?'+ // protocol '[[[[a-z\\d][[a-z\\d-]*[a-z\\d]]*]\\.]+[a-z]{2,}|'+ // domain name and extension '[[\\d{1,3}\\.]{3}\\d{1,3}]]'+ // OR ip [v4] address '[\\:\\d+]?'+ // port '[\\/[-a-z\\d%@_.~+&:]*]*'+ // path '[\\?[;&a-z\\d%@_.,~+&:=-]*]?'+ // query string '[\\#[-a-z\\d_]*]?$','i']; // fragment locator return pattern.test[str]; }
Vì vậy, giải pháp tốt nhất tôi có thể nghĩ là có được một số công cụ để thực hiện
isURL[str] {
var pattern = new RegExp['^[[ft|htt]ps?:\\/\\/]?'+ // protocol
'[[[[a-z\\d][[a-z\\d-]*[a-z\\d]]*]\\.]+[a-z]{2,}|'+ // domain name and extension
'[[\\d{1,3}\\.]{3}\\d{1,3}]]'+ // OR ip [v4] address
'[\\:\\d+]?'+ // port
'[\\/[-a-z\\d%@_.~+&:]*]*'+ // path
'[\\?[;&a-z\\d%@_.,~+&:=-]*]?'+ // query string
'[\\#[-a-z\\d_]*]?$','i']; // fragment locator
return pattern.test[str];
}
3 bằng cách sử dụng JavaScript thử một cái gì đó như isURL[str] {
var pattern = new RegExp['^[[ft|htt]ps?:\\/\\/]?'+ // protocol
'[[[[a-z\\d][[a-z\\d-]*[a-z\\d]]*]\\.]+[a-z]{2,}|'+ // domain name and extension
'[[\\d{1,3}\\.]{3}\\d{1,3}]]'+ // OR ip [v4] address
'[\\:\\d+]?'+ // port
'[\\/[-a-z\\d%@_.~+&:]*]*'+ // path
'[\\?[;&a-z\\d%@_.,~+&:=-]*]?'+ // query string
'[\\#[-a-z\\d_]*]?$','i']; // fragment locator
return pattern.test[str];
}
4. Thật không may, tôi đã không tìm thấy bất kỳ và trong Appereance là không thể. Tôi sẽ đánh giá cao bất kỳ ý kiến về điều này.Nhưng, cuối cùng, tôi có một máy chủ đang chạy
isURL[str] {
var pattern = new RegExp['^[[ft|htt]ps?:\\/\\/]?'+ // protocol
'[[[[a-z\\d][[a-z\\d-]*[a-z\\d]]*]\\.]+[a-z]{2,}|'+ // domain name and extension
'[[\\d{1,3}\\.]{3}\\d{1,3}]]'+ // OR ip [v4] address
'[\\:\\d+]?'+ // port
'[\\/[-a-z\\d%@_.~+&:]*]*'+ // path
'[\\?[;&a-z\\d%@_.,~+&:=-]*]?'+ // query string
'[\\#[-a-z\\d_]*]?$','i']; // fragment locator
return pattern.test[str];
}
5 và khi tôi sử dụng AJAX cho hầu hết các yêu cầu của mình, tôi đã viết một chức năng ở phía máy chủ để thực hiện yêu cầu Curl ở đó và quay lại trình duyệt.Về URL từ duy nhất trên câu hỏi 'Stackoverflow', nó sẽ dẫn tôi đến
isURL[str] {
var pattern = new RegExp['^[[ft|htt]ps?:\\/\\/]?'+ // protocol
'[[[[a-z\\d][[a-z\\d-]*[a-z\\d]]*]\\.]+[a-z]{2,}|'+ // domain name and extension
'[[\\d{1,3}\\.]{3}\\d{1,3}]]'+ // OR ip [v4] address
'[\\:\\d+]?'+ // port
'[\\/[-a-z\\d%@_.~+&:]*]*'+ // path
'[\\?[;&a-z\\d%@_.,~+&:=-]*]?'+ // query string
'[\\#[-a-z\\d_]*]?$','i']; // fragment locator
return pattern.test[str];
}
6, nơi daniserver.com.ar là tên miền của riêng tôi.Đã trả lời ngày 22 tháng 4 năm 2018 lúc 17:49Apr 22, 2018 at 17:49
1
Đây dường như là một trong những vấn đề khó khăn nhất trong CS;]
Đây là một giải pháp không hoàn chỉnh khác hoạt động đủ tốt cho tôi và tốt hơn những giải pháp khác mà tôi đã thấy ở đây. Tôi đang sử dụng đầu vào [type = url] cho điều này để hỗ trợ IE11, nếu không sẽ đơn giản hơn nhiều khi sử dụng Window.url để thực hiện xác thực thay thế: thay vào đó:
var parser = document.createElement['a'];
parser.href = "//example.com:3000/pathname/?search=test#hash";
parser.protocol; // => ""
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
5Để chấp nhận các đầu vào không đầy đủ như "www.mydomain.com", nó cũng sẽ làm cho nó hợp lệ giả định giao thức là "http" trong các trường hợp đó và trả về URL hợp lệ nếu địa chỉ hợp lệ. Nó trả về sai khi không hợp lệ.
Nó cũng hỗ trợ các tên miền IPv4, nhưng không phải IPv6.
Đã trả lời ngày 26 tháng 7 năm 2018 lúc 19:24Jul 26, 2018 at 19:24
Rosenfeldrosenfeldrosenfeld
1.70015 huy hiệu bạc19 Huy hiệu đồng15 silver badges19 bronze badges
Trong trường hợp của tôi, yêu cầu duy nhất của tôi là đầu vào của người dùng sẽ không được hiểu là một liên kết tương đối khi được đặt trong HREF của một thẻ A và các câu trả lời ở đây là một chút OTT cho điều đó hoặc cho phép URL không đáp ứng các yêu cầu của tôi, vì vậy điều này là những gì tôi đang đi với:
var parser = document.createElement['a'];
parser.href = "//example.com:3000/pathname/?search=test#hash";
parser.protocol; // => ""
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
6Điều tương tự có thể đạt được khá dễ dàng mà không cần Regex.
Đã trả lời ngày 25 tháng 3 năm 2019 lúc 15:34Mar 25, 2019 at 15:34
Rdansrdansrdans
2.14921 huy hiệu bạc32 huy hiệu đồng21 silver badges32 bronze badges
Đây không phải là cách tiếp cận hiệu quả nhất, nhưng nó có thể đọc được và dễ dàng hình thành cho bất cứ điều gì bạn cần. Và việc thêm regex/phức tạp từ đây dễ dàng hơn. Vì vậy, đây là một cách tiếp cận rất thực dụng
var parser = document.createElement['a'];
parser.href = "//example.com:3000/pathname/?search=test#hash";
parser.protocol; // => ""
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
7TEST:
var parser = document.createElement['a'];
parser.href = "//example.com:3000/pathname/?search=test#hash";
parser.protocol; // => ""
parser.hostname; // => "example.com"
parser.port; // => "3000"
parser.pathname; // => "/pathname/"
parser.search; // => "?search=test"
parser.hash; // => "#hash"
parser.host; // => "example.com:3000"
8Đã trả lời ngày 2 tháng 10 năm 2019 lúc 19:21Oct 2, 2019 at 19:21