我希望用户提交一个有效的网址,但也是一个图片,以.jpg,.png或.gif结尾.
(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*\.(?:jpg|gif|png))(?:\?([^#]*))?(?:#(.*))?
这是来自RFC 2396的官方URI解析regexp的(略微修改的)版本.它允许#fragments
和?querystrings
出现在文件名之后,这可能是您想要的,也可能不是.它还匹配任何有效的域,包括localhost
,它可能不是你想要的,但它可以被修改.
对此更传统的正则表达式可能如下所示.
^https?://(?:[a-z0-9\-]+\.)+[a-z]{2,6}(?:/[^/#?]+)+\.(?:jpg|gif|png)$ |-------- domain -----------|--- path ---|-- extension ---|
编辑请参阅我的其他评论,尽管这个评论并没有像这个完全回答,我觉得在这种情况下它可能更有用.但是,我要离开这里了卡玛 - 嫖娼 完整性的原因.
其实.
你为什么要查看网址?这并不能保证你得到的是一张图片,也不能保证你拒绝的东西不是图像.尝试对其执行HEAD请求,并查看它实际上是什么内容类型.
通常,最好使用内置库或框架函数验证URL,而不是滚动自己的正则表达式来执行此操作 - 请参阅检查字符串是否为有效URL的最佳正则表达式.
但是,如果您热衷于这样做,请查看以下问题:
获取URL的一部分(正则表达式)
然后,一旦你对URL(通过你用来验证它的任何方式)感到满意,你可以使用一个简单的"endswith"类型字符串运算符来检查扩展,或者像一个简单的正则表达式
(?i)\.(jpg|png|gif)$
(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