Javascript 使用JQUery检查字符串的图像url和存在性(如果有效)的真正方法是什么?

Javascript 使用JQUery检查字符串的图像url和存在性(如果有效)的真正方法是什么?,javascript,jquery,image,url,Javascript,Jquery,Image,Url,我正在开发一个数据库驱动的web应用程序。还有一个单元格,用户可以输入任何图像url或字符串作为输入。 是否有一个函数,图像url/字符串分隔,如果是图像,则检查是否存在。 我需要这样做,如果用户输入图像url,则图像将显示在应用程序中(如果存在),否则,如果用户输入字符串(消息),则消息将放置在应用程序中。 只是为了示范 function check_imageornot(data){ ........... if -> image && exist -

我正在开发一个数据库驱动的web应用程序。还有一个单元格,用户可以输入任何图像url字符串作为输入。
是否有一个函数,图像url/字符串分隔,如果是图像,则检查是否存在。
我需要这样做,如果用户输入图像url,则图像将显示在应用程序中(如果存在),否则,如果用户输入字符串(消息),则消息将放置在应用程序中。
只是为了示范

function check_imageornot(data){
    ...........
    if -> image && exist -> return 'image_ok';
    if -> image && not_exist -> return 'image_no';
    if -> string -> return 'string';
    }
}

注意:此函数将放入.js文件中,因此需要使用Javascript/jQuery方式(也可以是js/jQuery中的regex方式…)

仅通过查看文件名(或其URL)无法判断文件是否为图像。如果您谈论的是本地文件,那么可以使用HTML5文件操作工具打开该文件并嗅探其内容。但是,如果URL可以是Internet上任何位置的文件,则必须将URL发送到服务器,并让它确定它是什么


edit-@GGG在评论中有一个有趣的想法。

你不能仅仅通过查看文件名(或其URL)来判断文件是否是图像。如果您谈论的是本地文件,那么可以使用HTML5文件操作工具打开该文件并嗅探其内容。但是,如果URL可以是Internet上任何位置的文件,则必须将URL发送到服务器,并让它确定它是什么


edit-@GGG在评论中有一个有趣的想法。

我用下面的函数解决了我的问题

function is_image_valid(src) {
// Create new offscreen image to test
var image_new = new Image();
image_new.src = src;
// Get accurate measurements from that.
if ((image_new.width>0)&&(image_new.height>0)){
    return true;
} else {
    return false;
}
}

function is_image_ornot(input) {
if (/(jpg|gif|png)$/.test(input)){ // image url as input
    if (is_image_valid(input)){ // image found
        return 'image_ok';
    } else { // image couldnt be found
        return 'image_not';
    }
} else { // string as input
    return 'string';
}
};

/* usage */ is_image_ornot(variable)
但是,正如Pointy所描述的,并非所有以jpg结尾的字符串都意味着它是一个图像。。。 这将为我工作,因为这个项目将在公司内部使用,所有控制权在我手中。
我把这些代码放在这里只是给别人一个想法…

我用下面的函数解决了我的问题

function is_image_valid(src) {
// Create new offscreen image to test
var image_new = new Image();
image_new.src = src;
// Get accurate measurements from that.
if ((image_new.width>0)&&(image_new.height>0)){
    return true;
} else {
    return false;
}
}

function is_image_ornot(input) {
if (/(jpg|gif|png)$/.test(input)){ // image url as input
    if (is_image_valid(input)){ // image found
        return 'image_ok';
    } else { // image couldnt be found
        return 'image_not';
    }
} else { // string as input
    return 'string';
}
};

/* usage */ is_image_ornot(variable)
但是,正如Pointy所描述的,并非所有以jpg结尾的字符串都意味着它是一个图像。。。 这将为我工作,因为这个项目将在公司内部使用,所有控制权在我手中。
我把这些代码放在这里只是为了给别人一个想法…

只是一个小小的修改:

if (/(jpg|gif|png|JPG|GIF|PNG|JPEG|jpeg)$/.test(input)){ // image url as input

这样它就可以理解查看文件扩展名的不同方式。

只是一个小修改:

if (/(jpg|gif|png|JPG|GIF|PNG|JPEG|jpeg)$/.test(input)){ // image url as input

这样它就可以理解查看文件扩展名的不同方式。

我知道这是我朋友的一篇老文章,但下面是我在网站上用来检查图像url是否有效的代码:

function is_image(url,callback,errorcallback) {

var img = new Image();
if (typeof(errorcallback) === "function") {
    img.onerror = function() { errorcallback(); }
} else {
    img.onerror = function() { return false; }
}
if (typeof(callback) === "function") {
    img.onload = function() { callback(); }
} else {
    img.onload = function() { return true; }
}
img.src = url;

}
从字面上看,函数所做的是检查图像是否加载。例如,如果url为“”,函数将返回一个错误(因此它将运行放置在
img.onerror()
)中的函数),因为google的主页不是图像,而是html文件。由于此函数需要url发回信息,因此它是一个异步函数,这意味着您不能依赖此函数来遵循Javascript流,这就像发送AJAX请求一样。因此,无论您希望函数以后运行什么代码,都必须将其作为第二个参数放入函数中。例如,您的代码可以如下所示:

var imagelink = "http://www.google.com";
is_image(imagelink,function(){ 
    alert("This is an image!"); 
},function(){ 
    alert("This is not an image!")
});

因此,如果链接是一个图像,将弹出一个窗口,说“这是一个图像!”,如果不是,窗口将说“这不是一个图像!”。即使扩展名不是.jpg或类似的东西,该函数也将始终工作

我知道这是我朋友的一篇老帖子,但下面是我在网站上用来检查图像url是否有效的代码:

function is_image(url,callback,errorcallback) {

var img = new Image();
if (typeof(errorcallback) === "function") {
    img.onerror = function() { errorcallback(); }
} else {
    img.onerror = function() { return false; }
}
if (typeof(callback) === "function") {
    img.onload = function() { callback(); }
} else {
    img.onload = function() { return true; }
}
img.src = url;

}
从字面上看,函数所做的是检查图像是否加载。例如,如果url为“”,函数将返回一个错误(因此它将运行放置在
img.onerror()
)中的函数),因为google的主页不是图像,而是html文件。由于此函数需要url发回信息,因此它是一个异步函数,这意味着您不能依赖此函数来遵循Javascript流,这就像发送AJAX请求一样。因此,无论您希望函数以后运行什么代码,都必须将其作为第二个参数放入函数中。例如,您的代码可以如下所示:

var imagelink = "http://www.google.com";
is_image(imagelink,function(){ 
    alert("This is an image!"); 
},function(){ 
    alert("This is not an image!")
});

因此,如果链接是一个图像,将弹出一个窗口,说“这是一个图像!”,如果不是,窗口将说“这不是一个图像!”。即使扩展名不是.jpg或类似的东西,该函数也将始终工作

@Paul Nikonowicz,是的,我需要一种javascript方式。函数是为我需要的唯一想法而编写的。@Paul Nikonowicz,是的,我需要一种javascript方式。函数只为我需要的想法而编写。你不能在图像元素中加载非现场图像,并使用
onload
/
onerror
?@GGG有趣的想法。。。那可能有用!但是,我不知道是否可以依靠所有浏览器触发“错误”事件。但它可能会起作用。实际上,我得到了答案,我正在调整图像的宽度/高度以检查是否存在。但是,你能给我一个建议,到底是不是一个字符串图像url?我的意思是,如果字符串类似“”(带/不带http www)则返回“image”,否则返回“string”。谢谢,如果你愿意的话,你可以做类似的事情,但是没有任何东西可以确保以“.jpg”结尾的所有东西都是图像,或者不以“.jpg”结尾的所有东西都不是图像。玫瑰的JPEG(以任何其他名称命名)闻起来都很香。你不能在图像元素中加载非现场图像,并使用
onload
/
onerror
确定它们是否有效吗?@GGG有趣的想法。。。那可能有用!但是,我不知道是否可以依靠所有浏览器触发“错误”事件。但它可能会起作用。实际上,我得到了答案,我正在调整图像的宽度/高度以检查是否存在。但是,你能给我一个建议,到底是不是一个字符串图像url?我的意思是,如果字符串类似“”(带/不带http www)则返回“image”,否则返回“string”。谢谢,如果你愿意的话,你可以这样做