正则表达式验证PHP

时间:2014-12-16 23:39:08

标签: php regex

我一直试图让它工作一段时间但不能。这是我的问题:

我有以下注册。表达式:(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?。我正在尝试验证网址。

问题出在我的时候:

https://www.youtube.com/watch?v=QK8mJJJvaes<br />Hello”(这是使用nl2br在数据库中保存的方式)

它最终验证了这一点:https://www.youtube.com/watch?v=QK8mJJJvaes<br。我读过这个问题可能是因为reg中的\S*。表达。但如果我把它拿出来只会验证https://www.youtube.com/

我还想过在<br />之前添加一个空格,但我不知道它们是否是更好的解决方案。

非常感谢任何帮助:)。

完整代码:

$reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";

// The Text you want to filter for urls
$finalMsg = 'https://www.youtube.com/watch?v=QK8mJJJvaes<br />Hello';

// Check if there is a url in the text
if(preg_match_all($reg_exUrl, $finalMsg, $url)){
       // make the urls hyper links
       $matches = array_unique($url[0]);
       foreach($matches as $match) {
              $replacement = "<a href=".$match." target='_blank'>{$match}</a>";
              $finalMsg = str_replace($match,$replacement,$finalMsg);
       }
 }

1 个答案:

答案 0 :(得分:1)

将其更改为:

/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S[^<]*)?/

这至少会验证您的指定网址以及以标记结尾的任何其他网址... 在此测试:https://regex101.com/

编辑:不匹配根路径。 @Jonathan Kuhn在评论中提出的解决方案是最好的解决方案:

/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/[^\s<]*)?/

<强>更新

重新回顾一些旧的答案,我很恼火,为什么我像我一样评论..但我看不到问题,你的代码是有效的。 :d

虽然这段短代码也会这样做:

$url = "https://www.youtube.com/watch?v=QK8mJJJvaes<br />Hello";
$regex = '/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/[^\s<]*)?/';

// make the URLs hyperlinks
$url = preg_replace($regex, '<a href="$0" target="_blank">$0</a>', $url);

echo $url;