Проверка Url-Адреса Изображения Javascript
Мне нужно проверить url-адрес изображения, чтобы проверить, является ли url-адрес изображением любого из этих расширений: - jpeg, jpg, gif, png. Пример: - когда мы проверяем этот url http://www.example.com/asdf.jpg он должен дать нам истинное значение и с url-адресом, как это http://www.example.com/asdf.php должен возвращать false. Как мы можем сделать это в javascript, а также я хочу проверить тип контента url. Так что мы можем сказать, является ли URL-адрес изображения, или нет.
2 ответов
вы можете использовать регулярное выражение, как это, чтобы проверить расширение файла:
function checkURL(url) {
return(url.match(/\.(jpeg|jpg|gif|png)$/) != null);
}
это проверяет, заканчивается ли url-адрес в любом из этих четырех расширений.
Я не знаю, как из javascript в клиенте проверить тип контента URL-адреса, который не находится в том же домене, что и веб-страница, потому что вы не можете использовать ajax вне домена веб-страницы. Насколько я знаю, вам нужно будет отправить URL-адрес в серверный процесс и загрузить изображение, получить введите контент и верните его вам.
но вы можете проверить, может ли тег изображения загружать URL-адрес с помощью такой функции:
function testImage(url, callback, timeout) {
timeout = timeout || 5000;
var timedOut = false, timer;
var img = new Image();
img.onerror = img.onabort = function() {
if (!timedOut) {
clearTimeout(timer);
callback(url, "error");
}
};
img.onload = function() {
if (!timedOut) {
clearTimeout(timer);
callback(url, "success");
}
};
img.src = url;
timer = setTimeout(function() {
timedOut = true;
// reset .src to invalid URL so it stops previous
// loading, but doesn't trigger new load
img.src = "//!!!!/test.jpg";
callback(url, "timeout");
}, timeout);
}
эта функция вызовет ваш обратный вызов в будущем с двумя аргументами: исходный URL и результат ("успех", "ошибка" или "тайм-аут"). Вы можете увидеть эту работу на нескольких url, некоторые хорошие и некоторые плохие, здесь:http://jsfiddle.net/jfriend00/qKtra/
и, так как это теперь эпоха обещаний, вот версия, которая возвращает обещание:
function testImage(url, timeoutT) {
return new Promise(function (resolve, reject) {
var timeout = timeoutT || 5000;
var timer, img = new Image();
img.onerror = img.onabort = function () {
clearTimeout(timer);
reject("error");
};
img.onload = function () {
clearTimeout(timer);
resolve("success");
};
timer = setTimeout(function () {
// reset .src to invalid URL so it stops previous
// loading, but doesn't trigger new load
img.src = "//!!!!/test.jpg";
reject("timeout");
}, timeout);
img.src = url;
});
}
и демо-версия jsFiddle:http://jsfiddle.net/jfriend00/vhtzghkd/
используйте метод HEAD http request для проверки contenttype...
$.ajax({
type: "HEAD",
url : "urlValue",
success: function(message,text,response){
if(response.getResponseHeader('Content-Type').indexOf("image")!=-1){
alert("image");
}
}
});
чтобы проверить, содержит ли строка эти расширения, вы можете использовать метод inArray,
function checkUrl(url){
var arr = [ "jpeg", "jpg", "gif", "png" ];
var ext = url.substring(url.lastIndexOf(".")+1);
if($.inArray(ext,arr)){
alert("valid url");
return true;
}
}
edit: обновлена опечатка