Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

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 = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
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 = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
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 === "http:" || url.protocol === "https:";
}
console.log("http://example.com: "+isValidHttpUrl("https://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.:

  • function isValidURL(str) {
       var a  = document.createElement('a');
       a.href = str;
       return (a.host && a.host != window.location.host);
    }
    
    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à HTTP
  • function 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ên

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

Đã trả lời ngày 18 tháng 4 năm 2017 lúc 8:22Apr 18, 2017 at 8:22

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

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);
}

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

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 = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
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

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

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 = "http://en.wikipedia.org/wiki/Procter_&_Gamble";
console.log(isValidURL(testCase1)); // return true

var testCase2 = "http://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 = "https://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 = "https://stackoverflow.com/";
console.log(isValidURL(testCase6)); // return true

var testCase7 = "https://w";
console.log(isValidURL(testCase7)); // return false

var testCase8 = "https://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;
  }
}

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

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

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

2

Dựa vào thư viện: https://www.npmjs.com/package/valid-url

import { isWebUri } from 'valid-url';
// ...
if (!isWebUri(url)) {
    return "Not a valid url.";
}

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

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

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

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

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

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 Roca

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ế.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);
}
1

Lukeluke

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);
}
2

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 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

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

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

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

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: https://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 = "http://en.wikipedia.org/wiki/Procter_&_Gamble";
console.log(isValidURL(testCase1)); // return true

var testCase2 = "http://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 = "https://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 = "https://stackoverflow.com/";
console.log(isValidURL(testCase6)); // return true

var testCase7 = "https://w";
console.log(isValidURL(testCase7)); // return false

var testCase8 = "https://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 = "http://en.wikipedia.org/wiki/Procter_&_Gamble";
console.log(isValidURL(testCase1)); // return true

var testCase2 = "http://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 = "https://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 = "https://stackoverflow.com/";
console.log(isValidURL(testCase6)); // return true

var testCase7 = "https://w";
console.log(isValidURL(testCase7)); // return false

var testCase8 = "https://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);
}
6

Và 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: https://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);
}
8

Như 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);
}
9

Hà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 = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
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 = "http://en.wikipedia.org/wiki/Procter_&_Gamble";
console.log(isValidURL(testCase1)); // return true

var testCase2 = "http://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 = "https://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 = "https://stackoverflow.com/";
console.log(isValidURL(testCase6)); // return true

var testCase7 = "https://w";
console.log(isValidURL(testCase7)); // return false

var testCase8 = "https://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);
}
2

Nguồn

Đã trả lời ngày 11 tháng 6 năm 2020 lúc 8:45Jun 11, 2020 at 8:45

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

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'.

  1. 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

  2. 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

    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;
      }
    }
    
    1 nhưng khá khó để kiểm tra với biểu thức thông thường.

  3. 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 https://en.wikipedia.org/wiki/top-level_domain)

  4. 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 = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
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
    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;
      }
    }
    
    8.
  • 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 http://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 https: //010.010.000010.010/, https: //0x8.0x8.0x0008.0x8/, https: //8.8.2056/, https: //8.526344 Chỉ là những cách viết sáng tạo https://8.8.8.8/.
  • Cho phép các địa chỉ loopback (http://127.0.0.1/), địa chỉ IP riêng (http://192.168.1.1), địa chỉ liên kết-local (http://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
    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;
      }
    }
    
    9).
  • 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 http: // [:: 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ư https://127.0.0.1 và https: // [:: 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ự
    import { isWebUri } from 'valid-url';
    // ...
    if (!isWebUri(url)) {
        return "Not a valid url.";
    }
    
    0 chắc chắn không còn đủ.
  • 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ư
    import { isWebUri } from 'valid-url';
    // ...
    if (!isWebUri(url)) {
        return "Not a valid url.";
    }
    
    1 và nhiều người khác).
  • 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

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

Đã 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);
}
6

Bạn có thể kiểm tra và cải thiện nó ở đây https://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 JS

E.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);
}
8

your.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

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

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 = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
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

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

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ó: (http: // và https) cả hai

var parser = document.createElement('a');
parser.href = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
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

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

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 = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
parser.hostname; // => "example.com"
parser.port;     // => "3000"
parser.pathname; // => "/pathname/"
parser.search;   // => "?search=test"
parser.hash;     // => "#hash"
parser.host;     // => "example.com:3000"
2

Chú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 = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
parser.hostname; // => "example.com"
parser.port;     // => "3000"
parser.pathname; // => "/pathname/"
parser.search;   // => "?search=test"
parser.hash;     // => "#hash"
parser.host;     // => "example.com:3000"
3

Vậ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 = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
parser.hostname; // => "example.com"
parser.port;     // => "3000"
parser.pathname; // => "/pathname/"
parser.search;   // => "?search=test"
parser.hash;     // => "#hash"
parser.host;     // => "example.com:3000"
4

Thuộ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

Hướng dẫn how do you check if a value is a url javascript? - làm cách nào để kiểm tra xem giá trị có phải là url javascript không?

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
    import { isWebUri } from 'valid-url';
    // ...
    if (!isWebUri(url)) {
        return "Not a valid url.";
    }
    
    8.
  • Thực hiện cuộc gọi AJAX đến URL đầy thách thức với
    import { isWebUri } from 'valid-url';
    // ...
    if (!isWebUri(url)) {
        return "Not a valid url.";
    }
    
    9 là tốt, nhưng có những hạn chế khác nhau do các chính sách
    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);
    }
    
    0 và đó không phải là trường hợp sử dụng
    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);
    }
    
    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.
  • 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
    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);
    }
    
    2 và ném một ngoại lệ khi gọi các URL không an toàn.

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 = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
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 = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
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 = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
parser.hostname; // => "example.com"
parser.port;     // => "3000"
parser.pathname; // => "/pathname/"
parser.search;   // => "?search=test"
parser.hash;     // => "#hash"
parser.host;     // => "example.com:3000"
7

TEST:

var parser = document.createElement('a');
parser.href = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
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

URL trong JavaScript là gì?

URL.Một chuỗi hoặc bất kỳ đối tượng nào khác có trình biến đổi chuỗi - bao gồm, ví dụ, một phần tử hoặc phần tử - đại diện cho một URL tuyệt đối hoặc tương đối.Nếu URL là URL tương đối, cần có cơ sở và sẽ được sử dụng làm URL cơ sở.Nếu URL là một URL tuyệt đối, một cơ sở nhất định sẽ bị bỏ qua.cơ sở tùy chọn.A string or any other object with a stringifier — including, for example, an or element — that represents an absolute or relative URL. If url is a relative URL, base is required, and will be used as the base URL. If url is an absolute URL, a given base will be ignored. base Optional.

Bạn nên kiểm tra những gì khi xác thực URL?

Lớp URL để xác nhận URL được thảo luận trong bài trước ...
URL phải bắt đầu với HTTP hoặc HTTPS và ..
Sau đó, nó phải chứa www.và..
sau đó theo sau là tên miền phụ có chiều dài (2, 256) và ..
Phần cuối cùng chứa miền cấp cao nhất như .com,.org vv ..

Định dạng URL hợp lệ là gì?

Một URL điển hình có thể có biểu mẫu http://www.example.com/index.html, chỉ ra một giao thức (http), tên máy chủ (www.example.com) và tên tệp (chỉ mục. HTML).http://www.example.com/index.html , which indicates a protocol ( http ), a hostname ( www.example.com ), and a file name ( index. html ).

Điều nào sau đây là URL hợp lệ?

Câu trả lời là Tùy chọn 1. www.google.com là địa chỉ trang web hợp lệ.www.google.com is a valid website address.