我正在尝试验证 URL。这是我的代码:
function isValidURL($url)
{
return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}
此代码正在运行,但现在我正在尝试确定如何添加http://
或https://
URL 是否正确但只是缺少开头http://
请指出我正确的方向。
我正在尝试验证 URL。这是我的代码:
function isValidURL($url)
{
return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}
此代码正在运行,但现在我正在尝试确定如何添加http://
或https://
URL 是否正确但只是缺少开头http://
请指出我正确的方向。
您可以使用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
,你会很容易地得到很多参数并且格式可以理解。
所以你的代码将是
<?php
function isValidURL($url) {
$varr = parse_url($url);
if ($varr['scheme'] == 'https') {
return true;
}
return false;
}
?>
注意:上面使用的 URL 无效,用于测试目的
您可以这样使用strpos:
if (strpos($url,'http://') === false){
$url = 'http://'.$url;
}
要修复 Regex 的 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);
}
基于@seanwm,这是一个检查和修复 URL的函数。
PHP 函数
function fixUrl($url, $forceSSL = false) {
if (strpos($url,'http://') === false
&& strpos($url,'https://') === false) {
if($forceSSL) {
return 'https://'.$url;
}
return 'http://'.$url;
}
return $url;
}
采用
对于http://:
$url = fixUrl($url);
强制添加https://:
$url = fixUrl($url, true);