2011-12-14 57 views
3

我需要一个具有查询字符串的URL验证函数(参数与&分开)。目前我有以下功能验证网址使用PHP查询字符串验证的URL

$pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)[email protected])?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/'; 

echo preg_match($pattern, $url); 

此功能正确验证像

google.com www.google.com http://google.com http://www.google.com ...等

但这不会验证URL输入当它带有参数(查询字符串)时。例如。

http://google.com/index.html?prod=gmail&act=inbox 

我需要一个接受这两种类型的URL输入的函数。请帮忙。提前致谢。

回答

2

简单filter_var

if(filter_var($yoururl, FILTER_VALIDATE_URL)) 
{ 
    echo 'Ok'; 
} 

可能做的伎俩,虽然有与URL不是架构前面的问题:通过在URL的前面放置一个http:// http://codepad.org/1HAdufMG

你可以把周围的问题没有它。
正如@DaveRandom建议,你可以这样做:

$parsed = parse_url($url); 
if (!isset($parsed['scheme'])) $url = "http://$url"; 

喂养filter_var()函数之前。

整体而言,这仍然是一个比一些超复杂的正则表达式简单的解决方案,但..

它也有可这些标志:

FILTER_FLAG_PATH_REQUIRED FILTER_VALIDATE_URL需要的URL 包含路径的一部分。 FILTER_FLAG_QUERY_REQUIRED FILTER_VALIDATE_URL 需要URL包含查询字符串。

+1

FTR,我认为最明智的做法,以确保该方案存在将是`$ parsed = parse_url($ str);如果(!isset($ parsed ['scheme']))$ url =“http:// $ url”;` – DaveRandom 2011-12-14 13:48:11

+0

Thankyou,用您的评论更新 – 2011-12-14 13:53:29