我想验证的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://
请点我在正确的方向。
我想验证的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://
请点我在正确的方向。
要解决的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);
}
使用filter functions,这里有一个FILTER_VALIDATE_URL
。
$is_valid_url = filter_var($url, FILTER_VALIDATE_URL);
有一堆选项也see here。
要检测是否缺少http://
,只需测试您的输入而不必先修改它,然后尝试将其前置并在失败时再次测试。
可以使用strpos这样:
if (strpos($url,'http://') === false){
$url = 'http://'.$url;
}
您可以使用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
这样做的问题是,它可以让他们想要如什么都用户类型 - asdsaasdsad它仍然会算作是一个有效的URL – DCSoft 2013-03-16 19:40:48
@DCSoft谢谢:) – HamZa 2013-03-16 20:10:26
谢谢,它的工作原理完美,但你会说时间优化,它会更好地在窗体上运行它作为JavaScript并停止用户提交它,或者它会更好地在PHP脚本中执行它? – DCSoft 2013-03-16 20:29:45