检查链接是不是为图像

Posted

技术标签:

【中文标题】检查链接是不是为图像【英文标题】:Check if a link is an image检查链接是否为图像 【发布时间】:2013-10-24 02:20:44 【问题描述】:

我需要检查一个 URL 是否是图像。

答案here

/(jpg|gif|png)$/.test(...

在我的(特殊)情况下,当非图像 URL 中有扩展名时会引发误报

http://www.example.com/jpg/bpgpage/

(PS:不能用jquery,只能用javascript/regex)

【问题讨论】:

【参考方案1】:

如果 uri 以扩展名结尾,这应该每次都有效。

代码:

var isUriImage = function(uri) 
    //make sure we remove any nasty GET params 
    uri = uri.split('?')[0];
    //moving on, split the uri into parts that had dots before them
    var parts = uri.split('.');
    //get the last part ( should be the extension )
    var extension = parts[parts.length-1];
    //define some image types to test against
    var imageTypes = ['jpg','jpeg','tiff','png','gif','bmp'];
    //check if the extension matches anything in the list.
    if(imageTypes.indexOf(extension) !== -1) 
        return true;   
    

示例

http://jsfiddle.net/fMCFB/1/

【讨论】:

好一个。不过,为了确定,我会在用点分割之前删除? 部分。 @mavrosxristoforos 哈哈,是的,我在示例中这样做了,现在在答案代码中更新它;)【参考方案2】:

也许你可以在正则表达式前加一个点.,这样:

  /\.(jpg|gif|png)$/.test( ..

这将尝试匹配 URL 中的 .jpg.gif.png。 不过,您提到的正则表达式确实尝试仅在 URL 的末尾搜索 jpggifpng,所以我不确定它如何匹配 http://www.example.com/jpg/bpgpage/

如果您省略点 .,它仍将匹配 http://www.example.com/jpg

【讨论】:

这里的美元符号意味着它只会在 URL 的 END 处找到扩展名,因此它不会匹配任何包含扩展名的 URL。 我知道,但它仍然会匹配 http://www.example.com/jpg 这是一个目录。 @laggingreflex 是这样吗? @laggingreflex 哈哈经典【参考方案3】:

您可以在内容类型标题中验证这是一个函数示例:

async function verifyUrlImage(url)
try
    let resp= $.ajax(url);
    await resp;
    let headers=resp.getAllResponseHeaders().split(/\n/g);
    for(let i=0;i<=headers.length;i++)
        let hd=headers[i].split(': ')
        if (hd[0]=='content-type' && hd[1].indexOf('image')==0)
           return true;
    

catch
return false;

因此,如果内容类型以图像开头,则此链接是根据此图像类型的图像: https://www.iana.org/assignments/media-types/media-types.xhtml#image

你可以测试一下:

let isImage = await verifyUrlImage('https://www.gravatar.com/avatar/332cf4cffa6c5161c026485b98655079?s=48&d=identicon&r=PG');

【讨论】:

【参考方案4】:

这就是我要做的,其中“str”是您要匹配的字符串:

return (str.match(/\.(jpg|gif|png)$/)!= null);

【讨论】:

【参考方案5】:

// function for check the type of any source 
function checkExtension(file) 
    var extension = file.substr((file.lastIndexOf('.') + 1));
    switch (extension) 
    case 'jpg':
    case 'png':
    case 'gif':
        return "img" // There's was a typo in the example where
        break; // the alert ended with pdf instead of gif.
    case 'mp4':
    case 'mp3':
    case 'ogg':
        return "video"
        break;
    case 'html':
        return "html"
        break;
 
    
;
var ex = checkExtension("if-a-link-is-an-image.png")
console.log(ex)
     

【讨论】:

【参考方案6】:

为什么不使用 substr 提取最后三个字符?

url.substr(url.length-3, 3);

【讨论】:

以上是关于检查链接是不是为图像的主要内容,如果未能解决你的问题,请参考以下文章

如何检查给定网址中是不是存在图像?

链接资源不是作为内联图像 C#

检查文件是不是存在并提供指向它的链接 php

检查此元素或此元素是不是悬停在 jQuery 上

当使用 CSS 找不到图像时,是不是可以为每页定义一个全局“断开链接”图像? [复制]

Node.js:使用“fs”迭代目录时检查文件是不是为符号链接