在PHP中验证URL

时间:2011-08-09 21:48:43

标签: php url

  

可能重复:
  PHP validation/regex for URL

有没有简单,安全,快捷的方法来检查网址是否在PHP中有效?

3 个答案:

答案 0 :(得分:55)

是的,有!使用filter_var

if (filter_var($url, FILTER_VALIDATE_URL) !== false) ...

FILTER_VALIDATE_URL根据RFC 2396验证网址。

答案 1 :(得分:14)

如果我们查看RFC 3986,我们就可以找到网址的定义。

如果我们看一下附录B,就会有一个使用正则表达式来解析URL的指南:

  

附录B.使用正则表达式解析URI引用

     

因为“第一场比赛胜利”算法与“贪婪”相同   POSIX正则表达式使用的消歧方法,是
  自然而普通的使用正则表达式来解析
  URI引用的潜在五个组件。

     

以下行是用于分解a的正则表达式   格式良好的URI引用到其组件中。

  ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
   12            3  4          5       6  7        8 9
     

上面第二行中的数字仅供参考   可读性;它们表示每个参考点   子表达(即每个配对括号)。我们指的是   子表达式匹配的值为$。例如,匹配   上面的表达

  http://www.ics.uci.edu/pub/ietf/uri/#Related
     

导致以下子表达式匹配:

  $1 = http:
  $2 = http
  $3 = //www.ics.uci.edu
  $4 = www.ics.uci.edu
  $5 = /pub/ietf/uri/
  $6 = <undefined>
  $7 = <undefined>
  $8 = #Related
  $9 = Related
     

其中表示该组件不存在,如   是上例中查询组件的情况。   因此,我们可以将五个组件的值确定为

  scheme    = $2
  authority = $4
  path      = $5
  query     = $7
  fragment  = $9
     

反方向,我们可以重新创建一个URI引用   通过使用第5.3节的算法从其组件中获取。

您可以使用此正则表达式手动解析URL或使用PHP 4和5中可用的内置parse_url function

答案 2 :(得分:0)

这取决于你对有效的定义。语义有效,域名解析等。

快速方法是使用preg_match来测试针对正常表达式的url,以验证它的格式是否正确。这个帖子似乎有一些很好的例子PHP validation/regex for URL