使用正则表达式验证img url

时间:2014-05-18 22:09:04

标签: javascript php regex

我一直在尝试使用正则表达式验证图片网址,如下所示:

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

我希望能够取代:

[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]

使用:

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

使用:

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

谢谢!

3 个答案:

答案 0 :(得分:1)

这样的事情:

<?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:\n";
foreach ($arr as $str) {
    echo preg_replace($rgx, '<img src="$1" alt="">', $str) . "\n";
}

echo "\nAll together: \n";
echo preg_replace($rgx, '<img src="$1" alt="">', $all) . "\n";

键盘: http://codepad.org/n00B6akn

一些小调整:

或者这个调整加快了我制作的正则表达式,保持它贪婪而不是让中间非贪婪:

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

这里没有太多的斜线:

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

确保img标签匹配,并且它们之间的任何内容都以http(s)://开头,并以.png / .gif / .jpg结尾。如果你需要更好的验证,那么像hwnd最初做的那样(他的回答的第一部分)更合适(假设你根据自己的需要调整他的解决方案)。

答案 1 :(得分:1)

您可以使用以下内容。

$text = <<<DATA
[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]
DATA;

$text = preg_replace('~\[(img)\](https?://\S+\.(?:png|gif|jpg))\[/\1\]~', 
                     '<img src="$2" />', $text);

输出

<img src="http://www.website/folders/url_here.png" />
<img src="https://www.website/folders/url_here.jpg" />
<img src="https://www.website/folders/url_here.gif" />

请参阅Live demo

答案 2 :(得分:0)

你会想要使用类似的东西:

$output = preg_replace('/\[img\]((?:https|http|ftp):\/\/.+?\.(?:png|gif|jpg))\[\/img\]/igm', '<img src="$1" alt="Image">', $input);

$input是您的文字页面,$output是您的结果。正则表达式评估url和bbcode,然后将其添加到标记。我添加了alt =“”属性只是为了让它更有效。我也允许使用ftp协议,因为一些ftp服务器允许公共访问图像文件。

/igm使其不区分大小写,允许后续搜索从上一个匹配结束开始,并匹配行的开头和结尾,而不是整个字符串的开头和结尾。