我一直在尝试使用正则表达式验证图像网址,如下所示:
#\[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);
谢谢!
最佳答案
类似这样的事情:
<?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 最初所做的那样(他的答案的 v1)更合适(假设您根据需要调整他的解决方案)。
关于javascript - 使用正则表达式验证 img url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23727371/