例えば:
次の文字列があります。var x = "/windows/far/away/foo.jpg"
その文字列が URL であるかどうかはどうすればよいでしょうか?
私がする必要があるのは:
if (x.charAt(0) == '/') {
x = "http://www.example.com/" + x;
}
else {
x = "http://www.example.com/one/two/three" + x;
}
ここでの問題は、x が URL になるとどうなるかということです。お気に入り:
x = "http://www.externalpage.com/foo.jpg";
ご覧のとおり、結果は次のようになりますx.charAt(0)
。'h'
http://www.example.com/one/two/threehttp://www.externalpage.com/foo.jpg
さて、このような「多分」解決策:
if (is_valid_url( x )) {
....
}
else {
....
}
私はこれにこの関数を使用しています:
function is_valid_url(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 locater
if(!pattern.test(str)) {
alert("Please enter a valid URL.");
return false;
} else {
return true;
}
}
ただし、この関数は http と https でのみ機能し、ftp などの他のスキームでは機能しません。
問題を理解していただき、解決策を教えていただければ幸いです。ありがとう。