2011-12-27 42 views
1

我有这样的代码,到目前为止,它会检查其是否具有HTTP://在它的面前,如果如“google.co.uk”被输入,它会在它的前面添加http://。彻底检查输入的字符串是一个URL

但是它并没有得到解决,当人们穿上,说:“你好”,它会再添加http:在它前面//并将其视作一个URL。我需要一些能够检查到底是否有后缀的东西。

function checkURL($url) { 

if (empty($url)) 

{ 
    return $url; 


} 
else { 

if (preg_match('[a-z0-9-]i', $url)) { 

    return $url; 

    } else { 

if (preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url)) { 
return $url; 

} 
else { 

    $url = 'http://'.$url.''; 
    return $url; 
    } 

}

然后又是简单的检查,一旦它返回。

请帮忙!

+0

你已经占了用户在其中输入一个查询字符串的URL的情况呢? – 2011-12-27 17:45:03

+0

不,为什么会这样呢? – HarryBeasant 2011-12-27 18:16:32

+0

,因为实际上,链接引用与TLD结束 - 埃杜,.COM,.org等,这是您要验证后缀;然而,查询字符串会在该逻辑中引发一个问题,因为这意味着URL不会以TLD结束。因此,您可以检查后缀,但不能在文本的末尾。或者,您可以使用“?”分解文本作为分隔符,然后您可以应用您的逻辑。这应该也 – 2011-12-27 18:21:56

回答

4

不重新发明轮子。

使用本:

if (filter_var('someurl.com', FILTER_VALIDATE_URL) === true) { 

http://php.net/manual/en/function.filter-var.php

+0

良好的通话,我不知道该选项上filter_var存在。 – 2011-12-27 19:42:40

+0

只对http://验证,而不是后缀。 – HarryBeasant 2011-12-27 19:46:02

+0

@ user1063679过滤器验证URL是一个有点复杂得多,“只验证对于http://” http://svn.php.net/viewvc/php/php-src/trunk/ext/filter/logical_filters.c?view =标记 – dqhendricks 2011-12-28 09:10:31

0

的一个很好的正则表达式被扑灭通过John Gruber here

+0

工作,可这在功能的preg_match使用? – HarryBeasant 2011-12-27 17:55:22

相关问题