我有一个自动网站,我有一个名为SAVE SEARCH的功能,可以保存用户在网站上进行的搜索,以备将来使用。我正在做的是我将整个网址保存在数据库中。
但我需要将其验证为有效的网址。它看起来像这样。
http://www.anywebsite.com/cars.php?postcode=CV2+5AS&distance=&make=&min_price=&max_price=&category_type=&body_type=&fuel=&colour=&transmission=&year_of_registration=&mileage=&engine=&doors=&seller=&keywords=&sort=PRICE_LOWEST&referer_url=http%253A%252F%252Flocalhost%252Fselling%252Fcars.php&trader_id=0&case=ADVANCE
任何人都可以告诉我如何实现它吗?
我在这里有preg_match。
if (!preg_match('/^https?:(\/\/)?(www\.)?([a-zA-Z0-9_%]*)\b\.[a-z]{2,4}(\.[a-z]{2})?/', $fields[$field_name]))
但它只会验证http://www.anywebsite.com等网址,而我需要验证上面的整个网址。
任何帮助都将受到高度赞赏。
答案 0 :(得分:3)
没有理由说你需要手动编写URL验证代码,这个问题已经解决了。
看一下php的filter_var()
。
网址验证示例:http://www.w3schools.com/php/filter_validate_url.asp
$url = "http://www.anywebsite.com/cars.php?postcode=CV2+5AS&distance=&make=&min_price=&max_price=&category_type=&body_type=&fuel=&colour=&transmission=&year_of_registration=&mileage=&engine=&doors=&seller=&keywords=&sort=PRICE_LOWEST&referer_url=http%253A%252F%252Flocalhost%252Fselling%252Fcars.php&trader_id=0&case=ADVANCE";
if (!filter_var($url, FILTER_VALIDATE_URL)) {
echo "URL is not valid";
}
else {
echo "URL is valid";
}
答案 1 :(得分:3)
您应该将filter_vars()
与FILTER_VALIDATE_URL
过滤器一起使用,如其他答案所示。但是,如果您想使用RegEx,则必须通过In search of the perfect URL validation regex
我只会添加一个支持所有网址格式的@diegoperini RegEx。
答案 2 :(得分:2)
为什么你可以filter_var()
重新发明轮子?然后使用过滤器FILTER_VALIDATE_URL
filter_var
适用于PHP 5> = 5.2.0您还可以添加FILTER_FLAG_HOST_REQUIRED
以获取所需的域名,我相信您需要该域名,您可以查看其他标志以查看是否你需要它们。
示例:
$url = 'http://www.anywebsite.com/cars.php?postcode=CV2+5AS&distance=&make=&min_price=&max_price=&category_type=&body_type=&fuel=&colour=&transmission=&year_of_registration=&mileage=&engine=&doors=&seller=&keywords=&sort=PRICE_LOWEST&referer_url=http%253A%252F%252Flocalhost%252Fselling%252Fcars.php&trader_id=0&case=ADVANCE';
if(filter_var($url, FILTER_VALIDATE_URL)){
#do stuff here
}else{
#invalid
}
如果你有旧版本的PHP,你可以使用parse_url()
,但你必须添加正则表达式/验证,因为它不验证它是否是真实/有效的URL。