正则expression式检查以.jpg,.png或.gif结尾的有效URL
我希望用户提交一个有效的url,但也是一个图片,以.jpg,.png或.gif结尾。
?(?://([?^ /#] *))?(?:([?^:/#] +))([?^#] * \(:?JPG | GIF | PNG) )(?:?\([^#] *))?(?:#(*))?
这是RFC 2396官方URIparsing正则expression式(略微修改)的版本。 它允许在文件名后面出现#fragments
和?querystrings
,这可能是也可能不是你想要的。 它也匹配任何有效的域,包括localhost
,这可能不是你想要的,但它可以被修改。
更传统的正则expression式可能如下所示。
^ HTTPS://??(?:[A-Z0-9 \ - ] + \)+ [AZ] {2,6-}(?:[?^ /#] / +)+ \(:JPG | GIF | PNG)$ | --------域----------- | ---path--- | - 扩展名--- |
编辑看到我的其他评论 ,虽然没有像这个完全回答这个问题,我觉得这可能是在这种情况下更有用。 但是,我要离开这里 卡玛 – 嫖娼 完整性原因。
其实。
你为什么要检查url? 这不能保证你将得到的是一张图片,也不能保证你拒绝的东西不是图片。 尝试对其执行HEAD请求,并查看它实际上是什么内容types。
一般来说,最好使用内置库或框架函数validationURL,而不是滚动自己的正则expression式来执行此操作 – 请参阅什么是检查string是否为有效URL的最佳正则expression式以了解详细信息。
如果你热衷于这样做,但是,看看这个问题:
获取URL的部分(正则expression式)
然后,一旦你对URL感到满意(通过你用来validation它的任何方法),你可以使用简单的“endswith”types的string操作符来检查扩展,或者像一个简单的正则expression式
(?i)\.(jpg|png|gif)$
(http(s?):)|([/|.|\w|\s])*\.(?:jpg|gif|png)
这将从这个string加工所有图像:
background: rgb(255, 0, 0) url(../res/img/temp/634043/original/cc3d8715eed0c.jpg) repeat fixed left top; cursor: auto; <div id="divbg" style="background-color:#ff0000"><img id="bg" src="../res/img/temp/634043/original/cc3d8715eed0c.jpg" width="100%" height="100%" /></div> 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;
在这里testing你的正则expression式: https : //regex101.com/r/l2Zt7S/1
这是Perl的基本思想。 盐味道。
#!的/ usr / bin中/ perl的 使用LWP :: UserAgent; 我的$ ua = LWP :: UserAgent-> new; @ARGV = qw(http://www.example.com/logo.png); 我的$ response = $ ua-> head($ ARGV [0]); my($ class,$ type)= split m | / |,lc $ response-> content_type; 打印“这是一个图像!\ n”如果$ class eq'image';
如果您需要检查url,请使用一个坚实的库,而不是自己处理所有奇怪的情况:
使用URI; 我的$ uri = URI-> new($ ARGV [0]); my $ last =($ uri-> path_segments)[ - 1]; my($ extension)= $ last =〜m /\.([^.]+)$/ g; 打印“我的扩展名是$扩展名\ n”;
祝你好运, :)
如果你确实想要确定,抓住给定URL的第一个或第二个字节就足以确定你需要了解的图像的一切。
下面是一个如何使用Python 获取这些信息 的例子,以下是一个Django表单字段的例子,它允许您根据URL来轻松validation图像的存在,文件大小,尺寸和格式。
^((http(s?)\:\/\/|~/|/)?([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((/?\w+/)+|/?)(\w+\.(jpg|png|gif))
使用FastImage – 它会从URL中获取所需的最小数据,以确定它是否为图像,图像types以及尺寸。
除了丹的答案。
如果有一个IP地址,而不是域。
改变一下正则expression式。 (有效的IPv4和IPv6临时解决scheme)
^https?://(?:[a-z0-9\-]+\.)+[a-z0-9]{2,6}(?:/[^/#?]+)+\.(?:jpg|gif|png)$
但是,这可以改进,IPv4和IPv6validation子网范围。
(http(s?):)([/|.|\w|\s|-])*\.(?:jpg|gif|png)
对我来说真的很好。
这将匹配以下forms的URL:
3894/15008518202_c265dfa55f_h.png
在这里查看这个正则expression式的URL: http : //regexr.com/3g1v7