我希望用户提交一个有效的网址,但也是一个图片,以.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中获取所需的最少数据,以确定它是图像,图像类型和大小。