筛查以jpg结尾的图片python_关于image:正则表达式,用于检查以.jpg,.png或.gif结尾的有效网址...

该博客探讨了如何使用正则表达式验证用户提交的URL是否以.jpg、.png或.gif结尾,确保它们指向有效的图片。讨论了不同正则表达式的实现,包括考虑HTTP/HTTPS、域名、路径、片段标识符和查询字符串。建议在验证URL有效性后,还应使用头部请求检查实际内容类型,以确保确实为图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我希望用户提交一个有效的网址,但也是一个图片,以.jpg,.png或.gif结尾。

那么"jpeg"呢?

那么"somescript.php?image_id = 12345"怎么样?

stackoverflow.com/a/12470263/2534236

(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\.(?:jpg|gif|png))(?:\?([^#]*))?(?:#(.*))?

这是来自RFC 2396的官方URI解析regexp的(稍微修改过)版本。它允许#fragments和?querystrings出现在文件名之后,这可能是你想要的,也可能不是。它还匹配任何有效域,包括localhost,这可能不是您想要的,但可以修改。

对此更传统的正则表达式可能如下所示。

^https?://(?:[a-z0-9\-]+\.)+[a-z]{2,6}(?:/[^/#?]+)+\.(?:jpg|gif|png)$

|-------- domain -----------|--- path ---|-- extension ---|

编辑请参阅我的其他评论,尽管这个评论并没有像这个完全回答,我觉得在这种情况下它可能更有用。但是,我将这里留给karma-whoring del>完整性原因。

将"jpg"替换为"jpe?g",并在正则表达式上设置不区分大小写的标志。

这只有在URL实际有效时才真正有用。我不能计算我在URL中看起来非法字符的次数,特别是文件名中的空格。

我是第二个@PlexQ。是否有统一的正则表达式来检查网址是否有效且是图片网址?

还没到那里......匹配goo.com.png

这非常有用。我正在努力根据扩展名匹配网址。谢谢

其实。

你为什么要查看网址?这并不能保证你得到的是一张图片,也不能保证你拒绝的东西不是图像。尝试对其执行HEAD请求,并查看它实际上是什么内容类型。

根据您对URL背后的数据的偏执程度,您可能希望超越HEAD并获取(声称的)图像的完整内容,然后使用图像处理库来验证它是否是它声称的内容是。

这甚至不能保证图像仍然存在,并且实际上是将URL提供给浏览器时的图像。

通常,最好使用内置库或框架函数验证URL,而不是滚动自己的正则表达式来执行此操作 - 请参阅检查字符串是否为有效URL的最佳正则表达式。

但是,如果您热衷于这样做,请查看以下问题:

获取URL的一部分(正则表达式)

然后,一旦你对URL(通过你用来验证它的任何方式)感到满意,你可以使用一个简单的"endswith"类型字符串运算符来检查扩展,或者像一个简单的正则表达式

(?i)\.(jpg|png|gif)$

非常好的电话!以下是我为孩子们做的事情:1)使用JQuerys验证docs.jquery.com/Plugins/Validation 2)将此正则表达式片段添加到URL的末尾,并将其重命名为"urlphoto"就像魅力一样!做得好

(http(s?):)|([/|.|\w|\s])*\.(?:jpg|gif|png)

这将填充此字符串中的所有图像:

background: rgb(255, 0, 0) url(../res/img/temp/634043/original/cc3d8715eed0c.jpg) repeat fixed left top; cursor: auto;

background-image: url(../res/img/temp/634043/original/cc3d8715eed0c.png);

background: rgb(255, 0, 0) url(http://google.com/res/../img/temp/634043/original/cc3    _d8715eed0c.jpg) repeat fixed left top; cursor: auto;

background: rgb(255, 0, 0) url(https://google.com/res/../img/temp/634043/original/cc3_d8715eed0c.jpg) repeat fixed left top; cursor: auto;

在这里测试你的正则表达式:https://regex101.com/r/l2Zt7S/1

在目录/文件名中用连字符拆分路径

不适用于mysql regexp

(http(s?):)([|.|\w|\s|-])*\.(?:jpg|gif|png)表现稍好一点。它需要在URL中找到的http(而不是可选的)。此外,它支持URL中的破折号。

(http(s?):)([/|.|\w|\s|-])*\.(?:jpg|gif|png)对我来说非常好。

这将匹配以下格式的网址:

https://farm4.staticflickr.com/3894/15008518202_c265dfa55f_h.jpg

http://farm4.staticflickr.com/3894/15008518202_c265dfa55f_h.jpg

https://farm4.staticflickr.com/3894/15008518202-c265dfa55f-h.jpg

https://farm4.staticflickr.com/3894/15008518202.c265dfa55f.h.jpg

https://farm4.staticflickr.com/3894/15008518202_c265dfa55f_h.gif

http://farm4.staticflickr.com/3894/15008518202_c265dfa55f_h.gif

https://farm4.staticflickr.com/3894/15008518202-c265dfa55f-h.gif

https://farm4.staticflickr.com/3894/15008518202.c265dfa55f.h.gif

https://farm4.staticflickr.com/3894/15008518202_c265dfa55f_h.png

http://farm4.staticflickr.com/3894/15008518202_c265dfa55f_h.png

https://farm4.staticflickr.com/3894/15008518202-c265dfa55f-h.png

https://farm4.staticflickr.com/3894/15008518202.c265dfa55f.h.png

请在此处针对URL检查此正则表达式:http://regexr.com/3g1v7

如果你真的想确定,抓住第一个或两个给定的URL应该足以确定你需要知道的关于图像的一切。

下面是一个如何使用Python获取该信息的示例,这里是一个使用它的示例,作为Django表单字段,它允许您轻松验证图像的存在,文件大小,维度和格式,给定其URL。

这是Perl的基本思想。盐味。

#!/usr/bin/perl

use LWP::UserAgent;

my $ua = LWP::UserAgent->new;

@ARGV = qw(http://www.example.com/logo.png);

my $response = $ua->head( $ARGV[0] );

my( $class, $type ) = split m|/|, lc $response->content_type;

print"It's an image!

" if $class eq 'image';

如果您需要检查URL,请使用实体库,而不是尝试自己处理所有奇怪的情况:

use URI;

my $uri = URI->new( $ARGV[0] );

my $last = ( $uri->path_segments )[-1];

my( $extension ) = $last =~ m/\.([^.]+)$/g;

print"My extension is $extension

";

祝好运, :)

^((http(s?)\:\/\/|~/|/)?([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((/?\w+/)+|/?)(\w+\.(jpg|png|gif))

参考:请参阅官方go lang图像库文档中的DecodeConfig部分

我相信您也可以使用DecodeConfig来获取图像的格式,然后您可以根据jpeg,png,jpg和gif等const类型进行验证。

import (

"encoding/base64"

"fmt"

"image"

"log"

"strings"

"net/http"

// Package image/jpeg is not used explicitly in the code below,

// but is imported for its initialization side-effect, which allows

// image.Decode to understand JPEG formatted images. Uncomment these

// two lines to also understand GIF and PNG images:

// _"image/gif"

// _"image/png"

_"image/jpeg"

)

func main() {

resp, err := http.Get("http://i.imgur.com/Peq1U1u.jpg")

if err != nil {

log.Fatal(err)

}

defer resp.Body.Close()

data, _, err := image.Decode(resp.Body)

if err != nil {

log.Fatal(err)

}

reader := base64.NewDecoder(base64.StdEncoding, strings.NewReader(data))

config, format, err := image.DecodeConfig(reader)

if err != nil {

log.Fatal(err)

}

fmt.Println("Width:", config.Width,"Height:", config.Height,"Format:", format)

}

这里的format是一个字符串,表示文件格式,例如jpg,png等

此表达式将匹配所有图像网址 -

^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+(?:png|jpg|jpeg|gif|svg)+$

例子 -

有效 -

https://itelligencegroup.com/wp-content/usermedia/de_home_teaser-box_puzzle_in_the_sun.png

http://sweetytextmessages.com/wp-content/uploads/2016/11/9-Happy-Monday-images.jpg

example.com/de_home_teaser-box_puzzle_in_the_sun.png

www.example.com/de_home_teaser-box_puzzle_in_the_sun.png

https://www.greetingseveryday.com/wp-content/uploads/2016/08/Happy-Independence-Day-Greetings-Cards-Pictures-in-Urdu-Marathi-1.jpg

http://thuglifememe.com/wp-content/uploads/2017/12/Top-Happy-tuesday-quotes-1.jpg

https://1.bp.blogspot.com/-ejYG9pr06O4/Wlhn48nx9cI/AAAAAAAAC7s/gAVN3tEV3NYiNPuE-Qpr05TpqLiG79tEQCLcBGAs/s1600/Republic-Day-2017-Wallpapers.jpg

无效 -

https://www.example.com

http://www.example.com

www.example.com

example.com

http://blog.example.com

http://www.example.com/product

http://www.example.com/products?id=1&page=2

http://www.example.com#up

http://255.255.255.255

255.255.255.255

http://invalid.com/perl.cgi?key= | http://web-site.com/cgi-bin/perl.cgi?key1=value1&key2

http://www.siteabcd.com:8008

丹的答案除了。

如果有IP地址而不是域。

改变正则表达式。 (有效IPv4和IPv6的临时解决方案)

^https?://(?:[a-z0-9\-]+\.)+[a-z0-9]{2,6}(?:/[^/#?]+)+\.(?:jpg|gif|png)$

但是,这可以改进,IPv4和IPv6可以验证子网范围。

使用FastImage - 它将从URL中获取所需的最少数据,以确定它是图像,图像类型和大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值