2013-03-16 56 views
2

我想验证的URL。这是我的代码:PHP的URL验证,如果不是有效的修复它

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

此代码工作,但现在我试图找出如何添加http://https://如果URL是正确的,但就是缺少开始http://

请点我在正确的方向。

回答

1

要解决的HTTP使用正则表达式(S)的问题,您可以在括号之间设置http(s)?://,使其可选的?

var_dump(isValidURL("stackoverflow.com/questions/15453684/php-url-verification-and-if-not-valid-fix-it")); 

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

编辑: 感谢DCSoft,似乎上面的正则表达式也验证类似fijsfsdufd,这是一个快速修复,通过添加一个点:

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

This may be interesting.

+1

这样做的问题是,它可以让他们想要如什么都用户类型 - asdsaasdsad它仍然会算作是一个有效的URL – DCSoft 2013-03-16 19:40:48

+0

@DCSoft谢谢:) – HamZa 2013-03-16 20:10:26

+0

谢谢,它的工作原理完美,但你会说时间优化,它会更好地在窗体上运行它作为JavaScript并停止用户提交它,或者它会更好地在PHP脚本中执行它? – DCSoft 2013-03-16 20:29:45

6

使用filter functions,这里有一个FILTER_VALIDATE_URL

$is_valid_url = filter_var($url, FILTER_VALIDATE_URL); 

有一堆选项也see here

要检测是否缺少http://,只需测试您的输入而不必先修改它,然后尝试将其前置并在失败时再次测试。

1

可以使用strpos这样:

if (strpos($url,'http://') === false){ 
    $url = 'http://'.$url; 
} 
3

您可以使用parse_url()来验证您的网址 http://php.net/manual/en/function.parse-url.php

<?php 

$url = "https://twitter.com?id=3232"; 
$url_info = parse_url($url); 

echo "<pre>"; 
    print_r($url_info); 
echo "</pre>"; 


?> 

输出

Array 
(
    [scheme] => https 
    [host] => twitter.com 
    [query] => id=3232 
) 

我相信你甚至可以使用此功能工作parse_url你会得到批量的参数容易理解的格式。

所以你的代码会

​​

注:上面使用URL无效,其用于测试purspose