如何检查用户给定的值是url还是域名?
示例:
$a = array('http://domain.com/page/ex.html',
'http://domain.com/',
'domain.com'
);
foreach ($a as $v) {
if ($v is url)
// do something
} elseif ($v is domain) {
// do another thing
}
}
我应该怎么做才能检查$v
值是网址还是域名?
答案 0 :(得分:2)
使用filter_var($, FILTER_VALIDATE_URL)
来测试网址。要测试域,您可以执行表面容易出错的正则表达式,如preg_match('~^[a-z0-9][a-z0-9\.-]*\.[a-z]+$~i', $);
,也可以编写一个正确的函数来检查连续点,正确的gtld,验证长度等等。
答案 1 :(得分:2)
使用parse_url
:
foreach ($a as $v) {
$url = parse_url($v);
if (isset($url['host']) && $url['host'] != '') {
// valid host
}
}
答案 2 :(得分:0)
好吧,你应该使用正则表达式。查看this post from Daring Fireball
答案 3 :(得分:0)
您可以使用正则表达式
示例:live
$domainRegex = '/^[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$/';
$urlRegex = '/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/';
$a = array('http://domain.com/page/ex.html',
'http://domain.com/',
'domain.com'
);
foreach ($a as $v) {
if (preg_match($urlRegex, $v)) {
echo $v.': url<br/>';
} else if (preg_match($domainRegex, $v)) {
echo $v.': domain<br/>';
}
}
输出应为:
http://domain.com/page/ex.html: url
http://domain.com/: url
domain.com: domain
答案 4 :(得分:0)
嗯,不确定您对域名和网址的定义是什么。从示例中,我猜如果任何字符串包含/
,那么它是一个URL。
if(preg_match("|/|i", $v)){
print "url\n";
}
没有正则表达式:
if(strpos($v, "/")){
print "url\n";
}