doushouhe7072 2014-05-18 22:09
浏览 29
已采纳

使用正则表达式验证img url

I have been trying to validate a image url using regular expression like so:

#\[img\](((http:\/\/|https:\/\/)?(www.)?(([a-zA-Z0-9-]){2,}\.){1,4}([a-zA-Z]){2,6}(\/([a-zA-Z-_\/\.0-9#:?=&;,]*)?)?))\[\/img\]#iUs

i want be to able to replace:

[img]http://www.website/folders/url_here.png[/img]
[img]https://www.website/folders/url_here.jpg[/img]
[img]https://www.website/folders/url_here.gif[/img]

with:

<img src="http(s):www.website/folders/url_here.png(jpg, gif)" />

Using:

$new_string = preg_replace($search, $replace, $string);

Thank you!

  • 写回答

3条回答 默认 最新

  • duanliang2017 2014-05-18 22:51
    关注

    Something like this:

    <?php
    
    $rgx = '/\[img\](https?:\/\/.+?\.(?:png|gif|jpg))\[\/img\]/';
    $arr = array(
    'sdvsvsdvsdv[img]http://www.website/folders/url_here.png[/img]sdvsdvsvdsvdsdv',
    'sdvsvdsvd[img]https://www.website/folders/url_here.jpg[/img]svsnvlkn',
    'sdvsdvsdv[img]https://www.website/folders/url_here.gif[/img]svdsvd'
    );
    
    $all = 'sdvsvsdvsdv[img]http://www.website/folders/url_here.png[/img]sdvsdvsvdsvdsdv
    sdvsvdsvd[img]https://www.website/folders/url_here.jpg[/img]svsnvlknsdvsdvsdv[img]https://www.website/folders/url_here.gif[/img]svdsvd';
    
    echo "Individual strings:
    ";
    foreach ($arr as $str) {
        echo preg_replace($rgx, '<img src="$1" alt="">', $str) . "
    ";
    }
    
    echo "
    All together: 
    ";
    echo preg_replace($rgx, '<img src="$1" alt="">', $all) . "
    ";
    

    Codepad: http://codepad.org/n00B6akn

    Some little tweaks:

    Alternatively this tweak speeds up the regex I made by keeping it greedy instead of making the middle non-greedy:

    $rgx = '/\[img\](https?:\/\/[^\[]*\.(?:png|gif|jpg))\[\/img\]/'
    

    And here without as many slashes:

    $rgx = '~\[img\](https?://[^\[]*\.(?:png|gif|jpg))\[/img\]~'
    

    It makes sure the img tags are matched, and that whatever is inbetween them starts with http(s):// and ends with .png / .gif / .jpg. If you need better validation then something like what hwnd made initially (v1 of his answer) is more fitting (given you tweak his solution to your needs).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程