正则表达式检查有效的URL是否以.jpg,.png或.gif结尾

30 regex url image

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

Dan*_*Dan 69

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

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

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

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

编辑请参阅我的其他评论,尽管这个评论并没有像这个完全回答,我觉得在这种情况下它可能更有用.但是,我要离开这里了卡玛 - 嫖娼 完整性的原因.

  • 将"jpg"替换为"jpe?g",并在正则表达式上设置不区分大小写的标志. (10认同)

Dan*_*Dan 37

其实.

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

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

Bla*_*rad 14

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

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

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

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

(?i)\.(jpg|png|gif)$
Run Code Online (Sandbox Code Playgroud)


FDi*_*isk 13

(http(s?):)|([/|.|\w|\s])*\.(?:jpg|gif|png)
Run Code Online (Sandbox Code Playgroud)

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

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;
Run Code Online (Sandbox Code Playgroud)

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