[javascript] 자바 스크립트 문자열이 URL인지 확인
JavaScript에서 문자열이 URL인지 확인하는 방법이 있습니까?
URL은 다음과 같이 작성 될 가능성이 높기 때문에 RegExes는 제외됩니다 stackoverflow
. 즉 .com
, www
또는 이 없을 수도 있습니다 http
.
답변
답변이있는 관련 질문 :
또는 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.";
}