[javascript] 자바 스크립트 문자열이 URL인지 확인

JavaScript에서 문자열이 URL인지 확인하는 방법이 있습니까?

URL은 다음과 같이 작성 될 가능성이 높기 때문에 RegExes는 제외됩니다 stackoverflow. 즉 .com, www또는 이 없을 수도 있습니다 http.



답변

답변이있는 관련 질문 :

자바 스크립트 정규식 URL 일치

또는 Devshed 의이 Regexp :

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


답변

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


답변

URL생성자 를 사용하려고 할 수 있습니다 . 던지지 않으면 문자열은 유효한 URL입니다.

function isValidUrl(string) {
  try {
    new URL(string);
  } catch (_) {
    return false;
  }

  return true;
}

‘URL’이라는 용어는 RFC 3886 (URI)으로 정의됩니다 . 스키마 이름으로 시작해야하며 스키마 이름은 http / https로 제한되지 않습니다.

주목할만한 예 :

  • www.google.com 유효한 URL이 아닙니다 (결제 체계).
  • javascript:void(0) HTTP는 아니지만 유효한 URL입니다.
  • http://..유효한 URL이며 호스트..; 해결 여부는 DNS에 따라 다릅니다.
  • https://google..com 위와 동일한 유효한 URL입니다.

문자열이 유효한 HTTP URL인지 확인하려면 다음을 수행하십시오.

function isValidHttpUrl(string) {
  let url;

  try {
    url = new URL(string);
  } catch (_) {
    return false;
  }

  return url.protocol === "http:" || url.protocol === "https:";
}


답변

정규 표현식을 사용하는 대신 앵커 요소를 사용하는 것이 좋습니다.

href속성 을 설정하면 anchor다양한 다른 속성이 설정됩니다.

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"

출처

그러나 값 href이 바인드 된 URL이 유효한 URL이 아닌 경우 해당 보조 특성의 값은 빈 문자열입니다.

편집 : 주석에서 지적한 것처럼 : 유효하지 않은 URL이 사용되면 현재 URL의 속성이 대체 될 수 있습니다.

따라서 현재 페이지의 URL을 전달하지 않는 한 다음과 같은 작업을 수행 할 수 있습니다.

function isValidURL(str) {
   var a  = document.createElement('a');
   a.href = str;
   return (a.host && a.host != window.location.host);
}


답변

아래 기능을 사용하여 URL의 유무에 관계없이 URL의 유효성을 검사합니다 http/https.

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


답변

자바 스크립트를 사용하여 URL을 확인하는 방법은 다음과 같습니다.

function ValidURL(str) {
  var regex = /(http|https):\/\/(\w+:{0,1}\w*)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%!\-\/]))?/;
  if(!regex .test(str)) {
    alert("Please enter valid URL.");
    return false;
  } else {
    return true;
  }
}


답변

라이브러리에 의존하십시오 :
https://www.npmjs.com/package/valid-url

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