PHP Regex仅匹配常规有效URL

时间:2017-03-03 17:33:52

标签: php regex url

我正在寻找与有效的在线网址匹配的正则表达式。

例如:

exmaple.com
http://exmaple.com
https://exmaple.com
www.exmaple.com
http://www.example.com
https://www.example.com

特殊域名和扩展名如:

t.co
example.deals
sh.party

依此类推,但不会匹配所有复杂的内容,例如ftpget查询或2.3.3.1等网址。

我一直在使用'#(www\.|https?://)?[a-z0-9]+\.[a-z0-9]{2,4}\S*#i',但它会检测日期,例如3.3.2017

我需要这样,因为我将get_headers应用于每个找到的网址,当我get_headers为无效网址(如日期)执行时,我得到:

get_headers(http://03.03.2017): failed to open stream: Connection timed out

TL; DR:我正在寻找一个匹配网址的正则表达式,您可以get_headers()开启。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我想说Regex不是检查有效URL的最佳解决方案。最好使用FILTER_VALIDATE_URL

<?php
 $url = "https://www.w3schools.com";

 if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
   echo("$url is a valid URL");
 } else {
   echo("$url is not a valid URL");
 }
 ?>

答案 1 :(得分:1)

#(https?:\/\/)?([a-z0-9_~-]+\.)+[a-z]{2,5}(\/\S*)?#i

编辑:第三次尝试:开始时可选的http或https。在此之后至少有一个域名和一个点,然后是一个2-5个字母的顶级域和一个反斜杠和其他非空格字符的可选尾部。